如何在旧Notes客户端发送含附件及多RT字段的文档至Outlook?
解决方案思路
1. 生成HTML格式邮件正文(推荐)
Notes本身支持将富文本字段转换为HTML,你可以直接利用这个能力构建带格式的邮件正文,无需逐行拼接纯文本:
- 遍历文档的目标字段,对富文本字段调用
NotesRichTextItem.ConvertToHTML()方法生成HTML片段; - 为普通文本字段添加简单的HTML标签(比如
<p>、<b>)来规整格式; - 把所有字段的HTML片段拼接成完整的HTML结构(包含
<html>、<body>标签); - 通过
NotesMIMEEntity将HTML内容设置为邮件的正文,同时保留纯文本版本作为 fallback(避免不支持HTML的邮件客户端显示异常)。
简化代码示例(LotusScript)
Dim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim mailDoc As NotesDocument Dim bodyMIME As NotesMIMEEntity Dim htmlBody As String Set db = session.CurrentDatabase Set doc = db.GetDocumentByUNID("目标文档UNID") '替换为你的文档获取逻辑 ' 构建HTML正文 htmlBody = "<html><body>" htmlBody = htmlBody & "<h2>文档详情</h2>" htmlBody = htmlBody & "<p><b>标题:</b> " & doc.GetItemValue("Title")(0) & "</p>" ' 处理富文本字段 Dim rtItem As NotesRichTextItem Set rtItem = doc.GetFirstItem("Content") '替换为你的富文本字段名 If Not rtItem Is Nothing Then htmlBody = htmlBody & rtItem.ConvertToHTML() End If ' 添加其他字段... htmlBody = htmlBody & "</body></html>" ' 创建MIME邮件 Set mailDoc = db.CreateDocument() mailDoc.Form = "Memo" mailDoc.Subject = "文档: " & doc.GetItemValue("Title")(0) mailDoc.SendTo = "收件人邮箱" Set bodyMIME = mailDoc.CreateMIMEEntity("Body") Dim stream As NotesStream Set stream = session.CreateStream() Call stream.WriteText(htmlBody) Call bodyMIME.SetContentFromText(stream, "text/html;charset=UTF-8", ENC_IDENTITY_8BIT) ' 添加纯文本 fallback Dim plainTextMIME As NotesMIMEEntity Set plainTextMIME = bodyMIME.CreateChildEntity() Call stream.Truncate() Call stream.WriteText("请查看HTML版本以获取完整格式内容,或查看附件中的文档副本。") Call plainTextMIME.SetContentFromText(stream, "text/plain;charset=UTF-8", ENC_IDENTITY_8BIT) ' 添加附件(如果需要) Call mailDoc.Save(True, False) Call mailDoc.Send(False)
2. 将文档导出为PDF/HTML作为附件发送
如果构建HTML邮件太复杂,可以直接把整个文档导出为PDF或HTML文件,作为邮件附件发送,同时正文简单说明:
- 使用
NotesDocument.Export()方法将文档导出为PDF(需要Notes客户端支持PDF导出); - 把导出的文件添加到邮件的附件列表;
- 邮件正文只需简短说明“附件为文档的完整格式副本”即可。
代码示例(LotusScript)
Dim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim mailDoc As NotesDocument Dim exportPath As String Set db = session.CurrentDatabase Set doc = db.GetDocumentByUNID("目标文档UNID") ' 导出文档为PDF exportPath = session.GetEnvironmentString("Directory", True) & "doc_export.pdf" Call doc.Export(exportPath, "PDF") ' 创建邮件并添加附件 Set mailDoc = db.CreateDocument() mailDoc.Form = "Memo" mailDoc.Subject = "文档副本: " & doc.GetItemValue("Title")(0) mailDoc.SendTo = "收件人邮箱" mailDoc.Body = "请查看附件中的文档完整副本。" ' 添加附件 Dim rtItem As NotesRichTextItem Set rtItem = mailDoc.CreateRichTextItem("Body") Call rtItem.EmbedObject(EMBED_ATTACHMENT, "", exportPath, "文档副本.pdf") Call mailDoc.Save(True, False) Call mailDoc.Send(False) ' 清理临时文件(可选) Kill exportPath
3. 利用Notes表单的邮件模板
如果你的文档有对应的表单,可以直接使用表单作为邮件模板:
- 复制目标文档到新的邮件文档,指定使用原表单;
- 设置邮件的收件人、主题等属性;
- 发送时Notes会自动按照表单的格式渲染邮件正文,保留富文本格式。
代码示例(LotusScript)
Dim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim mailDoc As NotesDocument Set db = session.CurrentDatabase Set doc = db.GetDocumentByUNID("目标文档UNID") ' 复制文档到邮件 Set mailDoc = doc.CopyToDatabase(db) mailDoc.Form = "Memo" mailDoc.Subject = "文档: " & doc.GetItemValue("Title")(0) mailDoc.SendTo = "收件人邮箱" ' 移除原文档的无关字段(可选) Call mailDoc.RemoveItem("Form") ' 保留原表单用于渲染 mailDoc.Form = "Memo" mailDoc.$KeepPrivate = "1" ' 避免干扰原表单渲染 Call mailDoc.Send(False)
内容的提问来源于stack exchange,提问作者Ginni Machamer
相关产品推荐
相关产品推荐

