惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
V
V2EX
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
P
Privacy International News Feed
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
K
Kaspersky official blog
S
Secure Thoughts
T
Tenable Blog
Security Latest
Security Latest
The Cloudflare Blog
S
Security @ Cisco Blogs
H
Heimdal Security Blog
aimingoo的专栏
aimingoo的专栏
TaoSecurity Blog
TaoSecurity Blog
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
Schneier on Security
Schneier on Security
Webroot Blog
Webroot Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Scott Helme
Scott Helme
IT之家
IT之家
Latest news
Latest news
The Hacker News
The Hacker News
C
Check Point Blog
T
The Exploit Database - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
N
News | PayPal Newsroom
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
S
Security Affairs
S
Securelist
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
A
About on SuperTechFans

博客园 - 简单生活

街霸4无法建立离线用户的问题 - 简单生活 - 博客园 c/c++和.net之间相互调用 尴尬 一个通过散列在文件夹里找出相同文件工具(译) googleTranslateApi 想改变一些习惯很难 史玉柱这个人值得研究 秀才造反十年不成(转载) PLSQL常用方法汇总(转载) 值得收藏的民间小偏方 最近事情超级多 勇敢挑起重担 关于webcast的wmv文件在windows2003播放声音问题 2007年抓的兔子太多了,结果没抓到一个。 笔记本交还公司了,伴随了我两年的家伙。 用VS2005打开一个.NET2.0方案,里面有几个工程和一个网站,提示网站的项目.csproj文件无法打开:“此安装不支持该项目类型”,的解决办法。 wcg2007总决赛sky和pj双双银牌 - 简单生活 - 博客园 顿悟 网站盈利模式分析总结十条(转载)
POP3邮件客户端(.NET2.0)--译
简单生活 · 2008-02-18 · via 博客园 - 简单生活

POP3邮件客户端(.NET2.0

虽然.NET framework 2.0 已经通过改良SMTP类完善了对发邮件的支持,但是收邮件仍然是个缺陷。CodeProject里有各种各样的关于支持POP3的文章,但是都有缺陷:

  • 一些代码很难维护
  • 没有用.NET代码,用的是DLL
  • 太有限的功能并且报错。
  • 没有说明服务器命令和服务器响应。
  • 没有对SSL的支持。
  • 没有XML文件等等。

这个工程建立于早期的工程,但是用纯粹的C#2.0写的。文章首先着眼于从POP3服务器(RFC1939)下载邮件。有连接到POP3服务器的方法,获取邮件列表的方法,请求某些邮件的方法,删除邮件并断开的方法。详细的错误报备和跟踪适用于调式和专业的应用。以后的文章将把收到的邮件分解为(邮件)体,alternative views和附件在MIME规范之后。我用Gmail         作为测试,因为他被大家广泛的使用(推荐)。

代码基于一下工作:

背景:

POP3服务器相结合

POP3服务器下载一封邮件相当直接。用命令和POP3服务器通信相当简单并且易读。一旦一个连接,有可能用了SSL被确认,客户端需要调用一个在Pop3MailClient被叫做connected”的事务,用于提供一个有用户名和密码。

 
在连接的状态下,客户端可以执行一下命令:

  • STAT: GetMailboxStats()收件箱的大小和邮件数目。
  • LIST: GetEmailIdList(),所有邮件列表。
  • LIST [msg]: GetEmailSize(),某个邮件的大小。
  • UIDL: GetUniqueEmailIdList(),得到唯一的邮件ID
  • NOOP: NOOP(),仅仅判断服务器是否活动
  • RETR msg: GetRawEmail(),得到一个完整的邮件。
  • DELE msg: DeleteEmail(),一旦连接关闭,删除某个邮件。
  • RSET: UndeleteAllEmails(),服务器端删除没有做标记的邮件。
  • QUIT: Disconnect(),关闭连接。

为了更好的理解,这里推荐阅读官方的POP3规范,RFC1939

错误的处理与跟踪

相当多的事情会在两台计算机在互联网失去连接时发生。因此,固定性错误报告和追踪很有用。一些问题,像服务器端没有相应非常致命,并抛出异常。在一个异常之后,通常连接失去,并且需要重新建立。如果这个错误被POP3客户端代码发现,一个Pop3Exception(集成自ApplicationException)异常将会抛出,另外这是一个普通的.NET异常。以下问题,比如试图得到一个实际不存在的邮件,触发一个警告事件。它从事于用户POP3客户端代码师傅一个异常应该被抛出还是写入一个日志文件等等。在一个警告之后,POP3服务器准备下一个命令。

为了帮助更深入的研究通信问题,一个跟踪事件被突出。他展示命令和关于PopClientPopServer的响应变化。包含报警。它会非常健壮的在工程开始被使用,因为RFC1939给了服务器端很大的自由。经常被跟踪并附加说明。

使用代码

服务器端设置:

我认为服务器端设置,例如IP地址等等,在一个会话里不应该被改变。Pop3MailClient需要服务器端名称,端口,SSL是否被使用,用户名,密码在构造器里,并且不能被修改。如果你想连接的别的服务器端或者用别的用户,那么就简历一个新的Pop3MailClient

在代码执行之前,你必须输入你自己的用户名,密码:

// TODO: Replace username and password with your own credentials.

Pop3.Pop3MailClient DemoClient =

 new Pop3.Pop3MailClient(

    "pop.gmail.com", 995, true, "Username@gmail.com", "password");

如果你不是用的Gmail,当然你需要改变服务器名称和端口号,或许还要把useSSL改为false

读取邮件

GetRawEmail方法为一个信息编码返回整封邮件的正文。RFC1939指定只有ANSI编码可以被使用,因此email可以被容易的显示。但是由于特殊的编码的存在,看起来有点好笑。简码一封邮件将是我下一篇文章Pop3MimeClient》的一部分。

当服务器断线后的自动连接

我用Gmail做了大量的测试,有时候不能做出反应。如果isAutoReconnect属性设置了,Pop3MailClient将会在超时后尝试再次连接。总而言之,这个通常被使用,但是注意任何被标记了的邮件没有在服务器端删除。

兴趣点

功效

我猜测垃圾回收器话费了相当多的时间去回收内存。接收到的email是一些文本处理和想法,给我们一中不安的赶紧。我听到了你说,用Stringbuilders,但是他们甚至比strings要慢,如果仅仅是极少量的操作执行的话。这不是用于循环的时间吗,从新使用一个全局性的Stringbuilders为每一个收到的email?我注意到了不去介绍任何发生的问题。但是Framewrok本事没有reentrant!如果重复使用StringBuffers总是困扰你,把他们本地化吧。

Gmail

我使用Gmail有个很好的体验,尽管我它有两个缺陷:

  • Gmail shows maximal 250-260 mails in a mailbox, even if there are thousands. Gmail shows the oldest emails. As soon some emails get deleted (after disconnect), newer emails get available.
  • Gmail显示最多250-260mail在一个邮箱,即使有上千的邮件。Gmail显示最早的邮件,当有些邮件被删除后,新的邮件才可以有用。
  • The response of Gmail is sometimes slow and sometimes there is just no response.
  • 有的时候Gmail响应很慢,有的时候干脆没有响应。

===========================================================
原文地址:http://www.codeproject.com/KB/IP/Pop3MailClient.aspx
虽然英语不怎么样,但是还要坚持翻译。
===========================================================