You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在旧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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:36:17