通过 LotusScript 发送的 MIME 消息中的多个 To 和 Cc 标头
Posted
技术标签:
【中文标题】通过 LotusScript 发送的 MIME 消息中的多个 To 和 Cc 标头【英文标题】:Multiple To and Cc headers in MIME message sent through LotusScript 【发布时间】:2020-09-07 02:42:14 【问题描述】:我正在构建一个LotusScript 代理循环遍历一组文档,然后- 基于给定的条件- 创建带有格式化html 文本的邮件消息。收件人主要是非 Notes 用户(Outlook 等),这就是为什么我要确保主题和邮件正文的格式正确。不过,至少有一份副本会发送到 Domino 邮件数据库。
代码基本上创建了一个 MimeEntity,设置“To”、“CC”和“Subject”标头,然后将预先配置的消息放入邮件正文并发送出去。
关于正文,我尝试了一个格式为“text/html”的简单 MimeEntity 以及带有 2 个子实体(1:“text/ plain" 没有任何格式, 2: "text/html" 即 html 格式);在我的最终代码中,我打算采用后一种方法。
真正奇怪的是收件人(使用 Outlook 以及 Thunderbird 等其他邮件客户端)看到 3 个“To:”和 3 个“Cc:”项目,而不仅仅是一个。查看接收 Domino 邮件数据库中的文档,每个项目只有一个实例(即 SendTo 和 CopyTo)。
这是消息的源代码(取自 Thunderbird),显示了每个项目的这 3 个实例:
Return-Path: <sendername@myorg.de>
Received: (removed info here)
Subject: =?UTF-8?B?RWluIGdlbcO8dGxpY2hlcyBzaW1wbGVzIFRlc3RtYWlsIGF1cyBTT1A=?=
MIME-Version: 1.0
Auto-Submitted: auto-generated
To: user1@orgext1.de, user2@orgext2.de
CC: my-mail-in-db@myorg.de
To: user1@orgext1.de, user2@orgext2.de
CC: my-mail-in-db@myorg.de
To: user1@orgext1.de, user2@orgext2.de
CC: my-mail-in-db@myorg.de
Message-ID: <OFBCA50979.C1582837-ONC125856E.00548385-C125856E.0054838A@MYORG.DE>
From: Lothar Mueller <sendername@myorg.de>
这是创建这些邮件的基本代码(简单的非多部分版本):
Set docMemo = db.Createdocument()
Call docMemo.Replaceitemvalue("Form", "Memo")
Set nMimeBody = docMemo.Createmimeentity()
'SendTo
Set nMimeHead = nMimeBody.Createheader("To")
Call nMimeHead.Setheaderval("user1@otherorg.de,user2@3rdorg.de")
'CopyTo
Set nMimeHead = nMimeBody.Createheader("CC")
Call nMimeHead.Setheaderval("my-mail-in-db")
'Subject
Set nMimeHead = nMimeBody.Createheader("Subject")
Call nMimeHead.Addvaltext("Subject with ä-ö-ü-ß", "UTF-8")
'html version only for simple non-multipart MIME
Call nStream.Writetext(<p style="font-weight:bold;">Some simple formatted HTML content</p>)
Call nMimeBody.Setcontentfromtext(nStream, text/html; charset="UTF-8", ENC_NONE)
Call nStream.Close()
'finally send
Call docMemo.Send(False)
现在,我可以通过简单地将收件人设置为普通的旧 Notes 项目来解决此问题,例如:
Call docMemo.SendTo = recipientArray
Call docMemo.CopyTo = copyArray
而不是将这些值设置为 MIME 标头。在这种情况下,收件人的邮件客户端不再有多个“To”和“CC”项目实例。
我知道几年前我已经在另一个项目中这样做了,那时我还没有这些问题。
有人知道这可能是什么原因吗?可能是因为使用的 Domino 版本(现在是 10.0.1 FP4,当时是 9.0.1 版本)?
【问题讨论】:
在mail.box 中的文档被路由器接收之前,您是否查看过该文档?为此,您只需暂时停止路由器,然后在 Notes 客户端中打开 mail.box。在路由器将其序列化为 MIME 消息之前,我会检查文档以查看它的外观。序列化前是否有三个 To 项? (顺便说一句,我不确定你的解决方法有什么问题。允许混合普通的旧 Notes 项目和 MIME。) 感谢您的意见;显然我忘了提到我第一次尝试从我的设计师客户那里运行我的代理这一事实;在我编辑的帖子中查看更多信息 顺便说一句:你说得对,这里的混合技术没有错。我仍然很想知道这是从哪里来的 【参考方案1】:我猜我至少找到了部分原因:
正如我在帖子更新中提到的,这种行为只有在代理在客户端运行而不是在服务器上运行时才能观察到:
通过 Ytria 的 scanEZ 检查生成的邮件,我发现创建的字段有所不同:
-
在服务器上运行的版本只是创建了预期的字段“To:”和“Cc:”,它们在生成的 Notes 文档中显示为“SendTo”和“CopyTo”
如果代码在客户端运行,Notes 文档中会创建更多字段:除了标准字段之外,还有“INetSendTo”、INetCopyTo、“AltSendTo”和“AltCopyTo”。我假设这些额外的字段然后由路由器呈现为附加的“To:”和“Cc:”标题项。
再次感谢@DaveDelay 提出关于路由器和邮箱的想法
【讨论】:
啊!这就说得通了。客户端会做一些额外的工作来准备包含多个收件人的消息。它尝试向“内部”收件人发送常规注释,并向“外部”收件人发送 MIME 消息。该代码将 INetSendTo 和 AltSendTo 字段添加到注释中。 Afaik,该代码永远不会在服务器上执行。以上是关于通过 LotusScript 发送的 MIME 消息中的多个 To 和 Cc 标头的主要内容,如果未能解决你的问题,请参考以下文章
HTML 图像未显示在通过 VBA 中的 Gmail API 发送的 MIME 消息中,使用 3D