在收到新电子邮件之前,如何在 C# 中循环?

Posted

技术标签:

【中文标题】在收到新电子邮件之前,如何在 C# 中循环?【英文标题】:How do you loop in C# until a new email has arrived? 【发布时间】:2014-02-05 20:52:16 【问题描述】:
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();

            

           
    
    

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

【问题讨论】:

“我怎样才能在 C# 中创建一个循环,只有当新电子邮件到达收件箱时才会停止或强制执行任何操作。” – 这是您的电子邮件库必须直接支持的东西。 (我实际上认为这在 POP3 中是不可能的。)否则你唯一的选择就是轮询。 相当大量的代码,后面是一堵墙。这是一个难以阅读的问题。从将文本分成段落开始?此外,请确保您的代码示例最少(同时仍包含所有相关细节)。 【参考方案1】:

Pop3 是一种轮询协议。它不允许通知您有新邮件到达。你将不得不例如支持此 afaik 的 Exchange 协议。因此,对于 POP3 邮箱,邮件程序通常会在每个 e.g. 15分钟。我怀疑您的 POP3 库不直接支持此功能。因此,您必须使用 Timer 类并轮询新电子邮件。

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

【讨论】:

【参考方案2】:

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

关于如何做到这一点here 提出了类似的问题。其中一个答案提供了如何执行此操作的良好布局。

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

【讨论】:

以上是关于在收到新电子邮件之前,如何在 C# 中循环?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Google App Script MailApp.sendEmail 在循环中为每封电子邮件使用新线程?

Firebause身份验证:已发送但未在特殊电子邮件地址(如*@gmx.at)上收到的电子邮件

在授予新用户访问应用程序的访问权限之前,如何在 Flutter 和 Firebase 中验证新用户的电子邮件?

如何更改电子邮件状态google api c#

如何让outlook自动提示收到新邮件

微软前景通知