如何通过 IMAP 抑制已读回执?

Seb*_*ner 5 imap exchange-server

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

\Seen标志发送时,收据显然是由服务器自动发送的。所以 IMAP 命令看起来像这样:

c1 LOGIN username password
c2 SELECT mailbox
c3 UID STORE 123 flags \Seen
Run Code Online (Sandbox Code Playgroud)

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

虽然如何处理的情况下当用户希望发送已读回执?

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

在清除之前\Deleted\Seen之前标记消息也无济于事:

c1 UID STORE 123 flags (\Deleted \Seen)
c1 UID EXPUNGE 123
Run Code Online (Sandbox Code Playgroud)

那么如何在用户不想发送的情况下显式地抑制已读回执消息呢?

Jam*_*urn 3

解决此问题的唯一方法是更改​​ Exchange 服务器本身的设置。从Exchange 命令行管理程序中,输入以下命令:

set-ImapSettings -SuppressReadReceipt $true
Run Code Online (Sandbox Code Playgroud)

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

Technet 还提供了有关 的更多详细信息set-ImapSettings