Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有哪些方法可以让.NET代码在电子邮件到达时运行和处理它们?_C#_.net_Email - Fatal编程技术网

C# 有哪些方法可以让.NET代码在电子邮件到达时运行和处理它们?

C# 有哪些方法可以让.NET代码在电子邮件到达时运行和处理它们?,c#,.net,email,C#,.net,Email,我的任务是创建某种服务,它可以接收发送到某个电子邮件地址的任何电子邮件,并处理电子邮件的内容(包括二进制附件) 我已获得运行此服务的服务器(Windows server 2008)的完全访问权限,并决定使用.NET framework(3.5)编写解决方案 现在我在想我可以用不同的方法来做这件事。由于我在以编程方式处理电子邮件方面不是很有经验,因此我想到的第一个解决方案是创建一个电子邮件客户端,该客户端将定期轮询现有电子邮件服务器以获取传入的电子邮件(使用POP3协议)并对其进行处理。但还有其他

我的任务是创建某种服务,它可以接收发送到某个电子邮件地址的任何电子邮件,并处理电子邮件的内容(包括二进制附件)

我已获得运行此服务的服务器(Windows server 2008)的完全访问权限,并决定使用.NET framework(3.5)编写解决方案

现在我在想我可以用不同的方法来做这件事。由于我在以编程方式处理电子邮件方面不是很有经验,因此我想到的第一个解决方案是创建一个电子邮件客户端,该客户端将定期轮询现有电子邮件服务器以获取传入的电子邮件(使用POP3协议)并对其进行处理。但还有其他方法可以做到这一点

一种可能是使用IMAP保持与邮件服务器的连接,并在电子邮件到达时立即获取电子邮件(响应速度更快,但我认为IMAP协议更难实现)。接下来的问题是:在哪里可以找到支持POP3或IMAP协议的可靠电子邮件库

另一种可能是以某种方式配置电子邮件服务器,将发送到特定地址的电子邮件直接通过管道传输到我的二进制代码中(我在Linux服务器上看到过这种情况)。不过,我不知道该怎么做

我能想到的最后一个方法是在自己的地址上创建一个虚拟电子邮件服务器,在电子邮件到达时直接处理它,但对我来说这似乎是个坏主意

有人有这方面的经验吗?我可以想象,必须为票证支持系统编写电子邮件处理程序并不少见,除此之外,我还需要处理附件


如果有任何提示和提示,我将不胜感激。

我过去曾使用webdav和c#定期访问exchange服务器并处理电子邮件


这已经非常有效了,如果需要,我可能会再次使用该方法。

中的一些.net组件可能有助于满足您的需求

该应用程序每x分钟轮询一个POP3邮件服务器,并在队列中处理消息,并在处理每个消息时删除它们


QuikSoft工具还提供了解析电子邮件的方法,以从每条消息中获取内容。

与许多事情一样,这取决于具体情况。问自己以下问题:

  • 您的延迟要求是什么——您需要尽快处理传入消息,还是可以成批处理?如果可以批量处理,那么您需要多久处理一次“收件箱”

  • 您的吞吐量要求是什么?我们在这里每分钟谈论多少条消息?这些信息有多大?如果使用批处理方案,这将影响您对轮询间隔的决定

  • 您正在与哪种类型的电子邮件系统集成?如果是Exchange,有哪些编程接口可用于访问邮箱?有趣的是,在最新版本的Exchange之前,在访问Exchange服务器上的邮箱时存在问题(需要使用客户端CDO COM组件,但这并不理想,而且存在安全限制)

  • 到目前为止,最简单的方法是使用POP3轮询邮箱。然而,如果您需要立即响应传入的消息,那么这并不能阻止它

    尽可能避免编写自己的SMTP服务——以前已经编写过一千次了,这只会给自己造成不必要的工作,让自己暴露在安全威胁之下。如果您必须立即响应消息,那么最好设置一个实例或生成一个您编写的流程


    如果您打算使用POP3解决方案(看起来是这样),那么请阅读相关问题“”和“”。

    接收电子邮件不是最难的部分,解析和提取附件是最难的部分

    如果有人对商业产品感兴趣,请查看Mail.dll。 它支持您提到的空闲命令

    Mail.dll包括POP3IMAP客户端和功能强大的MIME解析器:

    using(Imap imap = new Imap())
    {
        imap.Connect("imap.server.com");
        imap.Login("user", "password");
    
        imap.SelectInbox();
        List<long> uidList = imap.SearchFlag(Flag.Unseen);
        foreach (long uid in uidList)
        {
            IMail mail = new MailBuilder()
                .CreateFromEml(imap.GetMessageByUID(uid));
            Console.WriteLine(mail.Subject);
        }
        imap.Close(true);
    }
    
    使用(Imap Imap=new Imap())
    {
    imap.Connect(“imap.server.com”);
    imap.Login(“用户”、“密码”);
    imap.SelectInbox();
    List uidList=imap.SearchFlag(Flag.Unseen);
    foreach(uidList中的长uid)
    {
    IMail mail=new MailBuilder()
    .CreateFromEml(imap.GetMessageByUID(uid));
    Console.WriteLine(mail.Subject);
    }
    imap.Close(真);
    }
    
    请注意,这是我创建的商业产品


    你可以从

    下载,我找到了这个:我将使用它作为起点。不过,我还是非常感谢其他选择。类似的问题是:一篇文章的副本可能会比这篇文章晚5个月吗?如果有帖子的话,应该是这样的:–如果这对这篇文章的未来读者有什么帮助的话,我最终使用了AfterLogic(www.AfterLogic.com)@Blixt:see提供的MailBee.NET IMAP。此外,“可能重复”的评论现在是自动生成的,我对此并不感到兴奋。没有真正的延迟要求,尽管在它们到达时处理它们会更好,以尽可能分散CPU使用。这将不是一个能够获得很大吞吐量的服务器。会有一些使用高峰(这是为了比赛),但在那之后,使用将非常低。每封邮件的容量将高达1MB(其中包括一段简短的移动视频)。要与之集成的电子邮件系统尚未确定,但我认为它不会是Exchange。最后,我打算通过尽可能多的代码重用来实现这一点,以便于使用指向库的指针。