c# - 通知 C# 客户端,当 SMTP 服务器收到新邮件时

标签 c# .net email push

我想在我的 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/

相关文章:

.net - 在 Windows 7 上使用 Powershell 删除防火墙规则

Java 邮件应用程序

c# - 在 Entity Core 中使用 Postgres lpad

c# - 从内存流中删除数据

.net - 使用 apachesoap :Map complex datatype in webservice using .net

.net - SHCreateStreamOnFileEx 链接器错误

c# - 信箱不可用。服务器响应是 : relay not permitted

html - 右对齐菜单栏中的文本

c# - 在 PictureBox 上绘制网格

c# - Nunit中测试JsonResult的Helper方法