从Excel VBA发送格式化的Lotus Notes富文本电子邮件

我有一点Lotus脚本或Notes / Domino的知识,但我有一个程序,从很久以前的地方复制,允许我通过从VBA的Notes发送电子邮件。 我通常只使用此格式的内部通知没有真正重要。

我现在想用这个发送外部电子邮件给客户,企业types宁愿电子邮件符合我们的风格指南(基本上是一个无衬线字体)。

我正要告诉他们,代码只能用纯文本工作,但是我注意到例程确实引用了某种CREATERICHTEXTITEM对象。 这是否意味着我可以应用某种forms的正文文本string之后,它已被传递给邮件例程? 除了维护我们珍贵的品牌价值之外,这对于突出电子邮件中的某些段落也非常方便。

我已经深入了解了这个networking,看看这个代码是否可以适应,但是不熟悉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
    昏暗的sendmail作为布尔值

     “添加到报告工具集成
     Dim dbString As String

     dbString =“mail \”&Application.UserName&“.nsf”

在错误转到SendMailError
     “build立与Notes的连接
    设置objNotesSession = CreateObject(“Notes.NotesSession”)
在错误恢复下一步
    build立连接到邮件文件
    设置objNotesMailFile = objNotesSession.GETDATABASE(MailServer,dbString)
     “打开邮件
     objNotesMailFile.OPENMAIL
在错误转到0

     “创build新备忘录”
    设置objNotesDocument = objNotesMailFile.createdocument

     Dim oWorkSpace As Object,oUIdoc As Object
    设置oWorkSpace = CreateObject(“Notes.NotesUIWorkspace”)
    设置oUIdoc = oWorkSpace.CurrentDocument

     '创build'主题字段'
    设置objNotesField = objNotesDocument.APPENDITEMVALUE(“Subject”,EmailSubject)

     '创build'发送'字段
    设置objNotesField = objNotesDocument.APPENDITEMVALUE(“SendTo”,EMailSendTo)

     '创build'复制到'字段
    设置objNotesField = objNotesDocument.APPENDITEMVALUE(“CopyTo”,EMailCCTo)

     '创build'盲'复制到'字段
    设置objNotesField = objNotesDocument.APPENDITEMVALUE(“BlindCopyTo”,EMailBCCTo)

     “创build'身体'的备忘录
    设置objNotesField = objNotesDocument.CREATERICHTEXTITEM(“Body”)

    用objNotesField
         .APPENDTEXT电子邮件地址
         .ADDNEWLINE 1
    结束

     '发送电子邮件

    调用objNotesDocument.Save(True,False,False)
     objNotesDocument.SaveMessageOnSend = True
     “objNotesDocument.Save
     objNotesDocument.Send(0)

     “释放存储
    设置objNotesSession = Nothing
    设置objNotesMailFile = Nothing
    设置objNotesDocument = Nothing
    设置objNotesField = Nothing

     '设置返回码
     sendmail = True

    退出小组

 SendMailError:
    昏暗的消息
     Msg =“Error#”&Str(Err.Number)&“was generated by”_
                 &Err.Source&Chr(13)&Err.Description
     MsgBox Msg,“Error”,Err.HelpFile,Err.HelpContext
     sendmail = False
结束小组 

简短的答案是肯定的。 漫长的回答是痛苦的。 没有任何伟大的类暴露在操作Notes中的富文本项目。 但是,您可以研究的一些是NotesRichTextStyle,NotesRichTextParagraphStyle和NotesRichTextTable等等。 这些类可以帮助您定义一些富文本元素,并以编程方式将其添加到您的富文本字段。

另一种方法,因为你发送电子邮件,是使用NotesMIMEEntity类,并使用HTML(方式更容易)构build电子邮件。 以下是一些示例代码:

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 

基本上,您需要在NotesSession中closuresConvertMIME设置。 然后创build一个新的文档,设置邮件属性等。这部分已经在你的VBA代码中。 接下来,创buildMIMEEntity和一个stream来保存您的HTML文本。 最后在你的MIMEEntity对象上调用SetContentFromText方法。 然后发送你的邮件。 请注意,最后一次调用是为NotesSession重新打开ConvertMIMEfunction。

我不确定这是否会通过COM工作,但它在Notes中的LotusScript代理中工作正常。

我希望这有帮助!

要更改其来源,请创build一个通用的Notes标识(例如,自动发送/您的公司)并使用该标识保存该代理。

我喜欢它的方式。 但是,我不得不将dbString = "mail\" & Application.UserName & ".nsf"更改为dbString = "mail\" & Application.CurrentUser & ".nsf"

第一条评论:我希望我不必在发送时打开Lotus Notes。

第二点评论:我希望能够改变电子邮件的来源(例如,如果我向50人发送报告,我希望它来自通用地址,而不是我的工作地址)