MailKit SMTP 和 IMAP 已读回执

问题描述 投票:0回答:1

我对使用 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 立即发送“未读”回复。我该如何克服这种行为?我不想先将标志设置为“阅读”,因为它们还没有。

如有任何指点,我们将不胜感激。

c# mailkit exchange-online
1个回答
-2
投票

此问题在 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

© www.soinside.com 2019 - 2024. All rights reserved.