Отправка отформатированного электронного письма Lotus Notes в формате Excel VBA - PullRequest
9 голосов
/ 26 марта 2009

У меня мало знаний по Lotus Script или Notes / Domino, но у меня есть процедура, скопированная откуда-то давно, которая позволяет мне отправлять электронные письма через Notes из VBA. Обычно я использую это только для внутренних уведомлений, где форматирование не имело значения.

Теперь я хочу использовать это для отправки внешних электронных писем клиенту, и корпоративные типы предпочитают, чтобы электронная почта соответствовала нашему руководству по стилю (в основном шрифт без засечек).

Я собирался сказать им, что код работает только с простым текстом, но затем я заметил, что подпрограмма ссылается на какой-то объект CREATERICHTEXTITEM. Означает ли это, что я мог бы применить какое-либо форматирование к строке основного текста после того, как было передано в почтовую процедуру? Наряду с поддержанием наших драгоценных ценностей бренда, это было бы очень удобно для меня, чтобы выделить некоторые отрывки в электронном письме.

У меня была информация о «сети», чтобы увидеть, можно ли адаптировать этот код, но он не был знаком с объектной моделью Notes, а тот факт, что онлайн-ресурсы Notes, похоже, отражают самоуверенность приложения, означал, что я не знал ». очень далеко.

код:

Sub sendEmail(EmailSubject As String, EMailSendTo As String, EMailBody As String, MailServer as String)

    Dim objNotesSession As Object
    Dim objNotesMailFile As Object
    Dim objNotesDocument As Object
    Dim objNotesField As Object
    Dim sendmail As Boolean

    'added for integration into reporting tool
    Dim dbString As String

    dbString = "mail\" & Application.UserName & ".nsf"

On Error GoTo SendMailError
    'Establish Connection to Notes
    Set objNotesSession = CreateObject("Notes.NotesSession")
On Error Resume Next
    'Establish Connection to Mail File
    Set objNotesMailFile = objNotesSession.GETDATABASE(MailServer, dbString)
    'Open Mail
    objNotesMailFile.OPENMAIL
On Error GoTo 0

    'Create New Memo
    Set objNotesDocument = objNotesMailFile.createdocument

    Dim oWorkSpace As Object, oUIdoc As Object
    Set oWorkSpace = CreateObject("Notes.NotesUIWorkspace")
    Set oUIdoc = oWorkSpace.CurrentDocument

    'Create 'Subject Field'
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("Subject", EmailSubject)

    'Create 'Send To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo)

    'Create 'Copy To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo)

    'Create 'Blind Copy To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("BlindCopyTo", EMailBCCTo)

    'Create 'Body' of memo
    Set objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body")

    With objNotesField
        .APPENDTEXT emailBody
        .ADDNEWLINE 1
    End With

    'Send the e-mail

    Call objNotesDocument.Save(True, False, False)
    objNotesDocument.SaveMessageOnSend = True
    'objNotesDocument.Save
    objNotesDocument.Send (0)

    'Release storage
    Set objNotesSession = Nothing
    Set objNotesMailFile = Nothing
    Set objNotesDocument = Nothing
    Set objNotesField = Nothing

    'Set return code
    sendmail = True

    Exit Sub

SendMailError:
    Dim Msg
    Msg = "Error # " & Str(Err.Number) & " was generated by " _
                & Err.Source & Chr(13) & Err.Description
    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
    sendmail = False
End Sub

Ответы [ 3 ]

10 голосов
/ 26 марта 2009

Краткий ответ - Да. Длинный ответ мучителен. В Notes нет замечательных классов, которые могли бы манипулировать элементами форматированного текста. Однако некоторые из них, которые можно исследовать, - это NotesRichTextStyle, NotesRichTextParagraphStyle и NotesRichTextTable. Эти классы помогут вам определить некоторые элементы форматированного текста и программно добавить их в поле расширенного текста.

Другой подход, поскольку вы отправляете электронную почту, заключается в использовании классов NotesMIMEEntity и создании электронной почты с использованием HTML (намного проще). Вот пример кода:

Set s = New NotesSession
Dim docMail As NotesDocument
Dim body As NotesMIMEEntity
Dim stream As NotesStream

Set db = s.CurrentDatabase
s.ConvertMIME = False ' Do not convert MIME to rich text

'Create email to be sent
Set docMail = db.CreateDocument

With docMail
        .SendTo = SEND TO ADDRESS
        .From = FROM ADDRESS
        .Principal = FROM ADDRESS
        .ReplyTo = REPLY TO ADDRESS
        .Subject = SUBJECT
        .Form = "Memo"
End With

  Set stream = s.CreateStream
Set body = docMail.CreateMIMEEntity
Call stream.WriteText ("YOUR HTML CODE GOES HERE")

'ENC_IDENTITY_8BIT used because of technote found on notes.net
'http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/aeedaf28e47546ad85256f6a000a4b48?OpenDocument
Call body.SetContentFromText (stream, "text/html;charset=iso-8859-1",ENC_IDENTITY_8BIT) 

Call docMail.Send(False)
Set docMail = Nothing
Set body = Nothing
Set stream = Nothing

s.ConvertMIME = True ' Restore conversion   

По сути, вам нужно отключить параметр ConvertMIME в NotesSession. Затем создайте новый документ, установите свойства почты и т. Д. Эта часть уже есть в вашем коде VBA. Затем создайте MIMEEntity и поток для хранения вашего HTML-текста. Наконец, вызовите метод SetContentFromText для вашего объекта MIMEEntity. Затем отправьте свою электронную почту. Обратите внимание, что последний вызов должен снова включить функцию ConvertMIME для NotesSession.

Я не уверен, что все это будет работать через COM, но это хорошо работает в агентах LotusScript в Notes.

Надеюсь, это поможет!

0 голосов
/ 03 июня 2010

Чтобы изменить, от кого это, создайте общий идентификатор Notes (например, Auto Send / YourCompany) и сохраните агента с этим идентификатором.

0 голосов
/ 05 марта 2010

Мне нравится так, как есть. Однако я должен был изменить dbString = "mail\" & Application.UserName & ".nsf" в dbString = "mail\" & Application.CurrentUser & ".nsf"

Первый комментарий: хотелось бы, чтобы во время отправки Lotus Notes не открывался.

Второй комментарий: Я хотел бы изменить адрес электронной почты (т.е. если я отправляю отчет 50 людям, я хочу, чтобы он был с общего адреса, а не с моего рабочего адреса)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...