我想实现一个确认对话框,用于在我的应用程序中发送电子邮件已读回执。该应用程序使用IMAP与邮件服务器进行通信,该邮件服务器目前仅限于Microsoft Exchange Server 2010。

当发送\Seen标志时,收据显然是由服务器自动发送的。因此,IMAP命令如下所示:

c1 LOGIN username password
c2 SELECT mailbox
c3 UID STORE 123 flags \Seen

(顺便说一句,这与another stackoverflow question中找到的解决方案形成对比,后者表示设置\Seen标志不会导致Exchange Server发送收据。)

虽然如何处理用户而不是要发送已读回执的情况?

我最初的想法只是不设置\Seen标志。尽管这会导致服务器自动向发件人发送一条通知,通知您该电子邮件已被删除而不被读取,以防从服务器中删除该邮件。

在删除之前,还用\Deleted\Seen标记消息无济于事:
c1 UID STORE 123 flags (\Deleted \Seen)
c1 UID EXPUNGE 123

因此,如果用户不想发送已读回执消息,该如何显式取消它呢?

最佳答案

解决此问题的唯一方法是更改​​Exchange服务器本身的设置。在Exchange Management Shell中,输入以下命令:

set-ImapSettings -SuppressReadReceipt $true

然后,对于通过IMAP读取的邮件,您将根本不会从Exchange获得任何已读取的回执。然后由您的应用程序自行生成已读回执。

Technet也有more detailed info about set-ImapSettings

10-08 20:18