我想在我的 ASP.NET 应用程序中获取所有具有特定抄送收件人的电子邮件。为了将其用于 future 的电子邮件,我不想一直轮询以获取它们。但我找不到办法,如何使用推送立即获取电子邮件。他们是否有任何 C# 框架可以帮助我解决这个问题?
我想将我的应用程序连接到邮件服务器并注册方法“X”。总是当新消息到达邮件服务器时,必须通知我的应用程序并且我的应用程序应该执行方法“X”。
我希望这样的代码是可能的:
void Application_Start()
{
...
ConnectWithTheSmtpServer();
RegisterMethodForNotification(DoSomethink);
...
}
void DoSomethink(Mail newMail)
{
// Do Somethink with the mail
}
编辑:
我是用 MailSystem.Net 做的.它工作得很好并且很容易实现。
示例代码:
void Application_Start()
{
var worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(StartIdleProcess);
if (worker.IsBusy)
worker.CancelAsync();
worker.RunWorkerAsync();
}
private void StartIdleProcess(object sender, DoWorkEventArgs e)
{
if (_imap != null && _imap.IsConnected)
{
_imap.StopIdle();
_imap.Disconnect();
}
_imap = new Imap4Client();
_imap.ConnectSsl(server-name, 993);
_imap.Login(username, passwort);
var inbox = _imap.SelectMailbox("INBOX");
_imap.NewMessageReceived += new NewMessageReceivedEventHandler(NewMessageReceived);
inbox.Subscribe();
_imap.StartIdle();
}
public static void NewMessageReceived(object source, NewMessageReceivedEventArgs e)
{
// Do something with the source...
}
最佳答案
您从错误的角度来处理这个问题。
SMTP 不支持接收邮件(别管 PUSH 邮件)。 POP3 可用于检索邮件,但它也不支持 PUSH(因此您必须拉取邮件)。
IMAP4 IDLE扩展是最常被称为 PUSH 邮件的东西——所以你需要找到一个支持 IMAP4 IDLE 的 C# 库。我找到了一些可以帮助您朝着正确方向前进的信息(没有理由在此处重复):
在选择需要支持 IDLE 的解决方案时请记住。 我真的很喜欢 MailSystem.Net 的样子因为它满足您的要求。
请记住,您的邮件服务器还需要启用 IMAP4 和 IMAP4 IDLE。一些邮件服务器不支持它,因此您可能运气不佳(并且必须使用 POP3 拉取)。
关于c# - 通知 C# 客户端,当 SMTP 服务器收到新邮件时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7358322/