【问题标题】:IMAP rebex Client connection timeoutIMAP rebex 客户端连接超时
【发布时间】:2018-02-21 18:01:43
【问题描述】:

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

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

在下方。

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

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

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

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

还有更优化的解决方案吗?谢谢

【问题讨论】:

  • (3) - 使用 Imap 对象作为单例 - 根本没有帮助。 IMAP 协议是基于会话的,一旦会话结束或失败,就无法恢复它。即使您重新连接 Imap 对象的同一实例,新会话也将独立于前一个会话。
  • 没错,这就是我使用唯一键的原因,以便我可以在不同的会话中使用它。我会在会话到期时处理这种情况,但实际的会话超时是多少?

标签: c# email imap rebex


【解决方案1】:

您可以使用Imap 对象的Settings.UsePeekForGetMessage 选项阻止GetMailMessage 将电子邮件标记为已查看

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

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

imap.SetMessageFlags(unique_key, ImapFlagAction.Add, ImapMessageFlags.Seen);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 2018-12-19
      • 2013-02-09
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多