在新邮件到达之前,你如何在C#中循环?

时间:2014-02-05 20:52:16

标签: c# email loops

using System;
using Limilabs.Mail;
using Limilabs.Client.POP3;

class Program
{
    static void Main(string[] args)
    {

        using (System.IO.StreamWriter file = new     System.IO.StreamWriter(@"C:\Users\*******\Desktop\WriteLines.txt", true)){

            using (Pop3 pop3 = new Pop3())
            {

                Console.WriteLine("Connecting...");

                pop3.ConnectSSL("pop3.live.com");  // or ConnectSSL for SSL 
                pop3.Login("****@live.com", "****");

                // Receive all messages and display the subject 
                MailBuilder builder = new MailBuilder();
                foreach (string uid in pop3.GetAll())
                {
                    IMail email = builder.CreateFromEml(
                    pop3.GetMessageByUID(uid));

                    file.WriteLine("Header: " + email.Subject);
                    file.WriteLine("Message: " + email.Text);

                }

                pop3.Close();

            }

        }   
    }
}    

所以我有这个问题,我想让这个程序全天候运行;它仍然不完整,但这只是为了显示基本的C#检索电子邮件等。我怎样才能在C#中创建一个只有当新邮件到达收件箱时才会停止或强制执行任何操作的循环?我希望该程序只是在收到实时发送的电子邮件时实际执行某些操作。我知道我可以一次一个接一个地打印出我的电子邮件,但我希望它能够运行,只有收到新消息才能让我做任何事情。例如idk,如果我要发送一个像干净的桌面这样的消息,它将停止并被解析,如果由我将要制作的另一个程序指定的有效命令序列,那么它将执行该命令然后继续无休止地循环等待另一条新消息。它基本上是一个全天候运行的服务器,它只响应新的电子邮件。这就是我想要的。非常感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

Pop3是一种轮询协议。它不允许通知您新邮件已到达。你必须要支持此afaik的Exchange协议。因此,对于POP3邮箱,邮件程序通常每次轮询新电子邮件。 15分钟。我怀疑你的POP3库不直接支持这个。因此,您必须使用Timer类并轮询新电子邮件。

可以在MSDN库中找到Timer类的文档: http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.110%29.aspx

答案 1 :(得分:0)

您可能希望使用轮询您的电子邮件收件箱的windows service

有人提出了类似的问题:here。其中一个答案为如何做到这一点提供了良好的布局。

此外,如果您尝试让您的网站执行此功能(因为您无权安装Windows服务),可以使用Quartz.net中突出显示的this question