我对使用 Exchange Online 的回执有一些疑问。
如果我使用
发送 SMTP 消息vEmail.Headers(HeaderId.DispositionNotificationTo) = SenderEmail
然后,当用户打开它时,它会发送回执请求(在本例中是我使用 Domino/Notes)
当从 Exchange 下载已读消息时,我得到这些值...
Dim Message = vClient.Inbox.GetMessage(vItems(i).UniqueId)
Dim vSubject As String = Message.Subject
Dim vBody As String = Message.HtmlBody
回执不在正文中,但可以在完整消息的末尾看到。我需要做的是获取一个句柄(如果存在) - 然后我可以获取文本以将其添加到正文中,并在主题前面加上“阅读:”前缀
第二个问题是 Exchange 如何处理收件箱消息的已读回执。
当使用 IMAP 从 Exchange 下载邮件时,它会以
结束vClient.Inbox.AddFlags(vItems(i).UniqueId, MessageFlags.Deleted, True)
从服务器删除(我本地有消息,不需要保留它们),然后...
vClient.Inbox.Expunge()
Expunge 运行后,Exchange 立即发送“未读”回复。我该如何克服这种行为?我不想先将标志设置为“阅读”,因为它们还没有。
如有任何指点,我们将不胜感激。
此问题在 MailKit 中得到解答 常见问题解答
已读回执通知采用 MIME 消息的形式,其中包含带有 MIME 类型的顶级 MIME 部分 的
multipart/report
具有值为 report-type
的 disposition-notification
参数。
您可以在如下代码中检查这一点:
var report = message.Body as MultipartReport;
if (report != null && report.ReportType.Equals ("disposition-notification", StringComparison.OrdinalIgnoreCase)) {
// This is a read receipt notification.
}
multipart/report
的第一部分将是人类可读的通知解释。
第二部分的 MIME 类型为
message/disposition-notification
,并表示为
MessageDispositionNotification。
此通知部分将包含一个类似标题字段的列表,其中包含有关 此通知针对的消息,例如
Original-Message-Id
、Original-Recipient
等
var notification = report[1] as MessageDispositionNotification;
if (notification != null) {
// Get the Message-Id of the message this notification is for...
var messageId = notification.Fields["Original-Message-Id"];
}
有关此主题的更多信息,请阅读rfc3798。