0

我有看不见的电子邮件的唯一键列表,我当前的逻辑是在一个会话/连接中处理它。但是,有时 server[rebex] 崩溃并发送错误 *

Rebex.Net.ImapException:服务器已关闭连接。

在以下点。

  • client.GetMailMessage(unique_key); //从唯一键获取特定电子邮件的信息

在这里,它会标记特定电子邮件的状态,尽管它会产生错误。因此,下次如果我尝试获取未见电子邮件的信息,则将错过此特定的唯一关键电子邮件。

在这里,我探索了一些可能的方法

  1. 将该错误电子邮件标记为看不见。
  2. 再次为该特定电子邮件创建连接并从中获取信息。
  3. 使 IMAP 客户端单例,每当它崩溃时,创建一个新的。

有没有更优化的解决方案?谢谢

4

2 回答 2

3

您可以使用对象的选项防止GetMailMessage将电子邮件标记为已看到:ImapSettings.UsePeekForGetMessage

var imap = new Imap();
imap.Settings.UsePeekForGetMessage = true;
...

一旦您真正决定将电子邮件标记为已查看,请使用SetMessageFlags以下方法:

imap.SetMessageFlags(unique_key, ImapFlagAction.Add, ImapMessageFlags.Seen);
于 2018-02-21T10:01:43.283 回答
0

经典的响应是将消息标记为在处理之后而不是之前处理。

如果处理特定消息导致崩溃,这可能会导致问题。不想重新连接并立即遇到同样的问题。因此,也许记录您上次尝试的时间,并首先尝试最旧的消息。

于 2018-02-21T09:57:32.460 回答