Отправка форматированного письма Lotus Notes rich text из Excel VBA

У меня мало Lotus Script или Notes/Domino knowledge, но у меня есть процедура, скопированная откуда-то давно, которая позволяет мне отправлять по электронной почте заметки из 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 ответов


короткий ответ-да. Длинный ответ болезнен. Нет больших классов, которые могут манипулировать элементами обогащенного текста в Заметках. Однако некоторые исследования являются 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.

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


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


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

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

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