繁体   English   中英

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

[英]How to constantly check for incoming mail?

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

我一直在网上搜索,但没有发现一些有建设性的东西,因为我没有使用POP3邮件编程/工作太多,只需要朝着正确的方向轻推。

什么是不断检查传入邮件的最佳方式?

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

POP根据定义使用拉动机制,因此不会有任何作用。

你的选择:

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

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

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

不幸的是

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM