在收到新电子邮件之前,如何在 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)上收到的电子邮件