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

标签 vba excel lotus-notes richtext lotusscript

我几乎没有 Lotus Script 或 Notes/Domino 知识,但我有一个程序,很久以前从某个地方复制的,它允许我通过 VBA 的 Notes 发送电子邮件。我通常只将它用于格式并不重要的内部通知。

我现在想用它来向客户发送外部电子邮件,而公司类型更希望电子邮件符合我们的样式指南(基本上是无衬线字体)。

我正要告诉他们该代码仅适用于纯文本,但后来我注意到该例程确实引用了某种 CREATERICHTEXTITEM 对象。这是否意味着我可以在正文字符串传递给邮件例程后对其应用某种格式?除了维护我们宝贵的品牌值(value)外,这对我强调电子邮件中的某些段落非常方便。

我对“网络”进行了深入研究,以查看是否可以修改此代码,但不熟悉 Notes 的对象模型,而且在线 Notes 资源似乎反射(reflect)了应用程序自身的迟钝,这意味着我不太了解远的。

编码:

Sub sendEmail(EmailSubject 作为字符串,EMailSendTo 作为字符串,EMailBody 作为字符串,MailServer 作为字符串)

将 objNotesSession 调暗为对象
将 objNotesMailFile 调暗为对象
将 objNotesDocument 调暗为对象
将 objNotesField 调暗为对象
将 sendmail 调暗为 bool 值

'添加用于集成到报告工具中
将 dbString 调暗为字符串

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

出错时转到 SendMailError
'建立与笔记的连接
设置 objNotesSession = CreateObject("Notes.NotesSession")
出错时继续下一步
'建立与邮件文件的连接
设置 objNotesMailFile = objNotesSession.GETDATABASE(MailServer, dbString)
'打开邮件
objNotesMailFile.OPENMAIL
错误转到 0

'创建新备忘录
设置 objNotesDocument = objNotesMailFile.createdocument

将 oWorkSpace 作为对象,oUIdoc 作为对象
设置 oWorkSpace = CreateObject("Notes.NotesUIWorkspace")
设置 oUIdoc = oWorkSpace.CurrentDocument

'创建'主题字段'
设置 objNotesField = objNotesDocument.APPENDITEMVALUE("Subject", EmailSubject)

'创建'发送到'字段
设置 objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo)

'创建'复制到'字段
设置 objNotesField = objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo)

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

“创建”备忘录的“正文”
设置 objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body")

使用 objNotesField
.APPENDTEXT 电子邮件正文
.ADDNEWLINE 1
结束于

'发送电子邮件

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

'释放存储
设置 objNotesSession = 无
设置 objNotesMailFile = 无
设置 objNotesDocument = 无
设置 objNotesField = 无

'设置返回码
发送邮件 = 真

退出子

发送邮件错误:
暗消息
Msg = "Error # "& Str(Err.Number) & "由 "_ 生成
& Err.Source & Chr(13) & Err.Description
MsgBox Msg, , "错误", Err.HelpFile, Err.HelpContext
发送邮件 = 假
结束子

最佳答案

简短的回答是肯定的。长长的回答是痛苦的。没有任何优秀的类可以用来操作 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   

本质上,您需要在 NotesSession 中关闭 ConvertMIME 设置。然后创建一个新文档,设置邮件属性等。该部分已经在您的 VBA 代码中。接下来,创建 MIMEEntity 和一个流来保存您的 HTML 文本。最后在您的 MIMEEntity 对象上调用 SetContentFromText 方法。然后发送您的电子邮件。请注意,最后一次调用是为 NotesSession 重新打开 ConvertMIME 功能。

我不确定这是否都可以通过 COM 工作,但它在 Notes 的 LotusScript 代理中运行良好。

我希望这有帮助!

关于vba - 从 Excel VBA 发送格式化的 Lotus Notes 富文本电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686384/

相关文章:

excel - 如何以编程方式将图像添加到命令按钮/表单按钮/图像控件

c# - 计算/将 Excel 列宽转换为 Word 表列宽的公式/算法

java - 我用 Java 创建了自己的记录器。这是一个坏主意吗?

java - 是否可以在 lotus notes 中调试 Java(不是 Javascript)脚本库(不是代理)?

excel - 无法获取工作表函数类的 Sumif 属性

vba - 从 VBA 复制范围中排除 1 行

vba - 将行复制到新工作表 VBA

excel - 编译错误: Argument not optional vba excel

excel - ssas自定义身份验证

ms-access - 从外部应用程序创建 Lotus Notes 文档