如何不断检查收到的邮件?

时间:2014-04-30 12:38:47

标签: c# .net pop3

我正在忙着开发一个必须经常检查特定电子邮件地址上的传入邮件的应用程序。一旦阅读此电子邮件,该程序将回复。

我一直在寻找网络,但是没有找到具有建设性的东西,因为我没有使用POP3邮件进行编程/工作,只需要朝着正确的方向轻推。

持续检查传入邮件的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

某些电子邮件服务器具有推送系统。

POP根据定义使用拉动机制,因此无论如何都不会起作用。

您的选择:

  1. 实施拉动机制并每分钟检查一次;
  2. 使用其他方式与您的邮件服务器集成,也许您可​​以在使用Exchange时使用EWS(我不确定它是否支持推送,但我认为)。

答案 1 :(得分:1)

如果您必须坚持使用POP3来检索邮件,那么除了轮询之外,您将没有任何其他选项。 POP3是一种旧的邮件协议,它不提供任何机制让邮件服务器在收到新邮件时通知其客户端。

如果您可以使用其他协议,则可以切换到现在大多数电子邮件服务器都支持的IMAP4。 IMAP协议提供IDLE命令,允许客户端保持其套接字打开,等待来自邮件服务器的通知。客户端不再需要轮询服务器以查明是否有新消息,只要收到新消息就会收到通知(以及消息删除,文件夹创建等通知)

不幸的是:

  • 目前在.Net框架中没有内置的IMAP支持。但是有许多第三方替代方案(例如,查看this SO thread
  • IMAP比POP3更复杂。如果您想要快速简单的解决方案,请坚持使用POP3轮询。

正如Patrick Hofman所提到的,Exchange Web Services(EWS)还会为您提供一种在收到新消息时收到通知的方法。还有一个由Microsoft提供的.Net托管API,免除了直接使用EWS SOAP API的麻烦。但是,这仅适用于Exchange服务器,并且必须在Exchange上启用EWS功能。

答案 2 :(得分:0)

我使用DispatcherTimer每隔x秒执行一次,如下所示:

        _timer = new DispatcherTimer();
        _timer.Tick += (s, e) => Sync();
        _timer.Interval = new TimeSpan(0, 0, syncTime);
        _timer.Start();

其中Sync()是与POP3服务器同步并下载消息的功能,syncTime是每次同步之间以秒为单位的时间。当然,如果你只想回复,你必须使用你的回复方法而不是Sync()。