在C#中使用Pop3阅读电子邮件

Eld*_*ila 75 c# unicode pop3

我正在寻找一种在C#2.0中使用Pop3阅读电子邮件的方法.目前,我正在使用CodeProject中的代码.但是,这种解决方案并不理想.最大的问题是它不支持用unicode编写的电子邮件.

Van*_*man 74

我已成功使用OpenPop.NET通过POP3访问电子邮件.


Mar*_*obr 16

通过POP3协议下载电子邮件是任务的简单部分.协议非常简单,如果您不想通过网络发送明文密码(并且不能使用SSL加密通信通道),唯一困难的部分可能是高级身份验证方法.有关详细信息,请参阅RFC 1939:邮局协议 - 版本3 RFC 1734:POP3 AUTHentication命令.

当您必须解析收到的电子邮件时,困难的部分就出现了,这意味着在大多数情况下解析MIME格式.您可以在几小时或几天内编写快速和脏的MIME解析器,它将处理所有传入消息的95%以上.改进解析器以便它可以解析几乎任何电子邮件意味着:

  • 获取从最流行的邮件客户端发送的电子邮件样本并改进解析器以修复由它们生成的错误和RFC错误解释.
  • 确保违反RFC的消息标题和内容的消息不会使您的解析器崩溃,并且您将能够从损坏的电子邮件中读取每个可读或可猜测的值
  • 正确处理国际化问题(例如,从左到右编写的语言,对特定语言的正确编码等)
  • UNICODE
  • 附件和分层消息项目树,如"Mime酷刑电子邮件样本"中所示
  • S/MIME(签名和加密的电子邮件).
  • 等等

调试健壮的MIME解析器需要花费数月的时间.我知道,因为我正在看我的朋友为下面提到的组件编写一个这样的解析器,并且正在为它编写一些单元测试;-)

回到原来的问题.

以下代码取自我们的POP3教程页面和链接可以帮助您:

// 
// create client, connect and log in 
Pop3 client = new Pop3();
client.Connect("pop3.example.org");
client.Login("username", "password");

// get message list 
Pop3MessageCollection list = client.GetMessageList();

if (list.Count == 0)
{
    Console.WriteLine("There are no messages in the mailbox.");
}
else 
{
    // download the first message 
    MailMessage message = client.GetMailMessage(list[0].SequenceNumber);
    ...
}

client.Disconnect();
Run Code Online (Sandbox Code Playgroud)

  • 基本上你说的是"买我的组件",对吧?没错,这听起来像是一个很好的组件. (8认同)
  • 作者讨论解析MIME的难度是由于他没有尝试过它的商业利益而受到污染. (4认同)
  • 您可以尝试任何第三方组件(免费或商业).我的帖子试图指出,编写这样的组件既困难又耗时,因为需要进行大量测试 - 如果没有大量真实用户数据的大量错误报告,你几乎无法做到这一点.如果你选择Rebex组件会很好,但是如果你选择另一个组件,我对它没有任何问题.编写自己的MIME解析器或使用Web上发现的一些概念验证代码是恕我直言,在这种情况下不是最好的方法.但我可能会有偏见;-),绘制自己的结论并首先测试代码. (3认同)

Cor*_*ger 8

我的开源应用程序BugTracker.NET包含一个可以解析MIME的POP3客户端.POP3代码和MIME代码都来自其他作者,但您可以在我的应用程序中看到它们是如何组合在一起的.

对于MIME解析,我使用http://anmar.eu.org/projects/sharpmimetools/.

请参阅文件POP3Main.cs,POP3Client.cs和insert_bug.aspx


ste*_*yer 5

可以说我是老派,但为什么要使用第三方库来实现简单的协议呢?我已经在基于 Web 的 ASP.NET 应用程序中实现了 POP3 阅读器,并使用 System.Net.Sockets.TCPClient 和 System.Net.Security.SslStream 进行加密和身份验证。就协议而言,一旦您打开与 POP3 服务器的通信,您只需处理少数命令。这是一个非常容易使用的协议。


Paw*_*ski 5

您还可以尝试Mail.dll邮件组件,它具有SSL支持,unicode和多国电子邮件支持:

using(Pop3 pop3 = new Pop3())
{
    pop3.Connect("mail.host.com");           // Connect to server and login
    pop3.Login("user", "password");

    foreach(string uid in pop3.GetAll())
    {
        IMail email = new MailBuilder()
            .CreateFromEml(pop3.GetMessageByUID(uid));
          Console.WriteLine( email.Subject );
    }
    pop3.Close(false);      
}
Run Code Online (Sandbox Code Playgroud)

您可以在https://www.limilabs.com/mail下载

请注意,这是我创建的商业产品.