http://www.naughter.com/pop3.html
欢迎到的CPJNPOP3Connection,一个免费的MFC类,以支持POP3(邮局协议第三版)协议。对于那些不熟悉所有的网络协议是POP3的协议,用于检索互联网电子邮件。
请注意,V1.42,现在该代码的Visual C + + 2005或更高版本。我不会支持VC 6了此代码,所以请不要发送电子邮件我要求这<gg>的。请记住VC 6现在是一个10岁的编译器。现在是时候升级到VC 2005 VC 2008!
参考文献
- 信息POP3(邮局协议第三版),你应该阅读RFC 1939。
- RFC 822和 RFC 2822定义的标准头文件中所使用的SMTP/POP3方式。
- RFC 2110和 RFC 2557,其中包括MHTML(又名HTML电子邮件)。
- 它是用来在不同的地方在SMTP/POP3 Base64编码RFC 1113和 RFC 1421中描述 。如果最终被简称为Base64在 RFC 2045
特点
- 简单,干净的C + +接口。
- 提供的接口是同步的,比使用异步套接字,它提供了一个更简单的编程模型。
- 不依赖于MFC的套接字类的代码。这些类有一些缺点,其中一个会导致问题时,它们被用在NT服务。
- 该代码可以在控制台应用程序中使用没有任何问题(同样,这是不MFC的套接字类的情况下)。
- 可配置的超时的连接可以通过设置类的API。
- 支持APOP,以及清晰的文本身份验证。
封闭zip文件包含CPJNPOP3Connection的源代码和一个简单的测试程序行使所有的类提供的功能。
版权
- 您可以在任何产品中包含源代码(商业软件,共享软件,免费软件或其他方式),当您的产品以二进制形式发布。
- 您可以在任何你想要的,除非你可以不修改版权的详细信息,每个模块顶部的修改源代码。
- 如果您要分发您的应用程序的源代码,那么你只允许分配的作者发布的版本。这是为了维持一个单一的源代码分发点。
更新
V1.1(1998年6月28日)
- 修正了一个潜在的缓冲区溢出问题,删除和检索功能时指定了一个大消息数。
- 提高的ReadResponse的代码:
i)将到套接字类和
II)的可读性检查时间为100 ms到环绕等待新的响应数据之前睡觉 - 类是完全支持Unicode标准。Unicode生成配置现在也包括在内。
- 现在支持TOP的POP3命令,它可以发出的getHeader功能。
- 修正了一些错别字的文档中。
- 感谢克里斯戴维森的所有建议和bug修复。
V1.11(1999年1月4日)
- 次要更新的文档。
- 现在,包括VC工作区文件作为标准。
- 正确的Unicode使所有的代码,该代码公开的ASCII(LPSTR / LPCSTR)API,而不是TCHAR / CString的API。
V1.12(1999年2月22日)
- 建时的调试版本的代码现在已经默认超时设置为60秒。
- 改进了读取从服务器返回的响应通过实施可增长的接收缓冲区。
- 如何可以检索相关的RFC文档更新的说明。
V1.13(1999年3月25日)
- 修正的CPJNPOP3Connection中的内存泄漏:: ReadReturnResponse功能。
- 现在休眠250毫秒,而不是产生的时间片。这有助于减少CPU的使用情况时,等待数据到达的插座
V1.14(1999年6月15日)
- 新增功能返回邮件正文,标题或特定的报头字段的消息。
- 整理了一些跟踪消息的代码生成。
- 修正了一些拼写错误和拼写错误,在帮助文件中。
V1.15(1999年6月16日)
- 修正了一个错误,结果造成了一个标题出现在开始的头字段被正确解析失败的项目在GetHeaderItem功能。
V1.16(1999年6月27日)
- 修正了一个错误在GetHeaderItem功能时,头跨越多行,如RFC 822所允许的。
V1.17(1999年6月29日)
- 另一个改进GetHeaderItem。会什么时候结束的<g>。本来这是一个错误,但报告经进一步调查,事实证明,该消息是造成问题的嵌入选项卡的标题。这是气馁的RFC,它指的是邮件头(RFC 822)。已得到增强的代码来处理这种情况。感谢克里斯主教,用于探测。
- 修复中的错误GetHeaderItem我不小心使用“=”,而不是“==”。感谢华先生法比奥用于探测。
- 更新文档,请参阅RFC 822。
V1.18(1999年7月5日)
- 增加以下功能:
I)()
II)CPop3Message CPop3Message :: GetReplyTo :: GetRawBody
三)CPop3Message :: GetSubject
四)CPop3Message :: GetFrom
v)CPop3Message :: GETDATE - 现在GetHeaderItem功能使用不区分大小写的搜索。
- GetHeaderItem现在允许你搜索指定类型的第n个“头”。
V1.19(1999年8月24日)
- 修正了一个错误的功能GetHeader有时失败时,它被称为消息时使用的“TOP”命令检索。
V1.20(2000年3月26日)
- 修正了一个问题GetBody和GetRawBody会失败,如果你调用它的一个CPop3Message对象,没有一个消息,它(即m_pszMessage == NULL)。这是以前造成了混日子的老存取违规GetRawBody。
V1.21(2000年9月20日)
- 修正了一个错误CPJNPOP3Connection :: UIDL消息ID返回他们的嵌入点。由于康斯坦丁Vasserman发现和解决这个问题。
2001年3月24日
- 更新的文档和版权信息。
V1.22(2001年7月27日)
- 增加了两个方法,即:会过()和GetCC()的CPop3Message类。
V1.23(2001年8月11日)
- 修正:: ReadResponse决定终止失败时,嵌入的NULL是在消息中的错误CPJNPOP3Connection。
V1.24(2001年9月27日)
- 修正了一个错误的CPJNPOP3Connection :: ReadResponse在处理断线错误时。由于玉衡赵发现这个问题。
- 在删除,GetMessageSize和GetMessageID的方法改进了错误处理。感谢Y. Melnik的美心发现这个问题。
V1.25(2001年9月29日)
- 进一步完善了错误处理在CPJNPOP3Connection :: ReadResponse
2003年3月29日
- 最初我打算添加文件附件支持类和许多人要求此功能,但在我的研究中,我遇到了一个更加全面功能的C + +封装的MIME,我可能实现。该项目本身被称为MIME + +和URL http://www.hunnysoft.com/mimepp/。提供的类都是很好的实现在C + +和MFC,和我CPJNPOP3Connection类都很好地结合起来。这是商业软件。另外,您可以使用CDO for Windows 2000的解析什么是返回的类。我不建议在未来添加支持的附件,所以请没有更多的电子邮件,要求这个!
V1.26(2003年7月5日)
- 添加的CPop3Message类的拷贝构造函数和operator =方法。感谢指出这个遗漏的“斯登”。
- 制造类虚拟的析构函数。
V1.27(2003年7月21日)
- 类跨调用断开,保留了最后的命令响应。这是特别重要的,在呼叫连接时,例如你的POP3错误“的错误。无法锁定邮箱”或类似的东西,当你调用连接。“列夫埃尔伯特”报告这个问题,并提供修复程序。
2003年8月18日
- ·克里斯蒂安·安徒生采取了CPJNPOP3Connection,类,并开发了一个版本的Windows CE上运行。该代码可以在这里下载 。我想请你提出任何查询有关基督教的这段代码我只举办一个有利于他的代码。
v1.28(2003年11月3日)
- 简化了代码CPJNPOP3Connection :: ReadResponse。感谢克拉克布伦特报告此问题。
- 评论语句在代码中的各种微量元素。
v1.29(三年十一月六日)
- 修正了一个问题,一个未初始化的“m_pszMessage”在CPop3Message构造。感谢迈克尔板机报告这个问题。
V1.30(2003年11月12日)
- 修正了一个错误在CPop3Message运算符=方法。感谢亨里克Grek报告这个错误。
V1.31(二零零四年六月五日)
- 修正了一个错误CPJNPOP3Connection :: ReadResponse,其中错误的参数被空终止。由于此更新的的“caowen”。
V1.32(2004年7月4日)
- 增加了一个IsConnected()方法的CPJNPOP3Connection类。这除了感谢亚历山德罗·罗莎。
- 增加了两个新的辅助功能,即CPop3Message :: GetEmailAddress和CPop3Message :: GetEmailFriendlyName。感谢亚历山德罗罗莎这个建议。
v1.33中(二零零四年八月九日)
- 修正了一些代码被编译时,编译器警告VC.Net 2003
V1.34(2005年3月28日)
- 修正了一些在示例应用程序代码被编译时,VC。NET 2003的编译器警告。
- 超时默认为5秒在调试模式下。
- 新增支持SOCKS4,SOCKS5和HTTP代理连接
- 增加了通过SSL POP3支持。由于Serhiy巴甫洛夫和阿列克谢·库兹涅佐夫表明此更新。请注意,因为我没有访问它提供了SSL上的POP3邮件服务器,你应该考虑这种支持初步的,直到我得到的反馈此功能的用户。仍然是标准的POP3支持全面的功能和测试的过程。
V1.35(2005年4月9日)
- 更新的初始化代码OpenSSL的示例应用程序,以避免内存泄漏。由于阿列克谢·库兹涅佐夫报告这些问题。你应该在你的应用程序中实现相同的初始化和清理代码。有关详细信息,请查看“main.cpp的”模块中的代码是封闭的#ifndef的POP3_NOSSL_SUPPORT /#ENDIF部分的。
- 现在是公开,而不是受保护的“列表”功能。由于阿列克谢·库兹涅佐夫报告这些问题。
- 添加一个简单的的“FindMessageID”传回的消息给定的索引返回的消息ID通过UIDL。这除了由于阿列克谢·库兹涅佐夫。
V1.36(2006年2月8日)
- 更新的文档的网站使用相同的样式。
- 从下载的zip文件resource.h中删除不必要的。
- 修正问题CPJNPOP3Connection / WP64编译:: FindMessageID。由于阿列克谢·库兹涅佐夫报告此问题。
- 更新的著作权细节。
- 重命名类,到包括一个PJN的前缀嵌入我的SMTP类。
- 允许类,可以很容易地添加到扩展DLL提供了PJNPOP3_EXT_CLASS
- 本文档的拼写检查。
- 改变预处理器宏,以排除SSL支持是CPJNPOP3_NOSSL的。这是为了保持与我的SMTP类。
- 更改默认释放模式超时为60秒,超时时间为90秒默认的调试模式。这是为了保持与我的SMTP类。
V1.37(2006年2月13日)
- 修正了一个优美的脱节问题在CPJNPOP3Connection :: ReadResponse。
V1.38(2006年7月9日)
- 优化CPJNPOP3Message构造函数的代码。
- “现在使用新的C + +风格转换,而不是旧式C投射在必要时。
- 优化CPJNPOP3Connection构造函数代码
- 现在,所有的类使用异常来指示错误。这意味着整个地区是一大堆简单的处理代码中的错误。你应该仔细检查你的代码,因为很多从方法(尤其CPJNPOP3Connection)的返回值现在取消,将抛出CPJNPOP3Exception的。
- 一般之类的返工,使其符合与作者的CPJNSMTPConnection代码
- 更新的示例应用程序中的代码描绘出它是什么做的
- 更新2005年关于VC编译的代码清洁
V1.39(2006年11月20日)
- 次要更新的示例应用程序,允许它来清洁VC 2005编译
- 优化ReadResponse方法,所以,如果阅读“RETR”响应时发生错误,实际的命令文本设置成m_sLastCommandResponse,而不是整个消息。这样就避免了伟大业绩打Unicode项目,因为m_sLastCommandResponse的CString的性质(ANSI - > Unicode转换)。由于阿列克谢·库兹涅佐夫报告此问题。
V1.40(2007年7月21日)
- 更新后的版权详细内容
- CPJNPOP3Connection ::连接,删除,统计,列表,UIDL,复位,NOOP和GetMessageHeader方法,现在赶上CWSocketException异常和重新抛出CPJNPOP3Exception例外。这允许客户端代码,只希望从类CPJNPOP3Exception异常被抛出。由于阿列克谢·库兹涅佐夫报告此问题。
V1.41(2007年12月31日)
- 更新的样例应用程序,清理2008年VC + +的编译
- CPJNPOP3Exception ::,GetErrorMessage现在使用的FORMAT_MESSAGE_IGNORE_INSERTS,标志。欲了解更多信息,请参阅Raymond Chen的博客http://blogs.msdn.com/oldnewthing/archive/2007/11/28/6564257.aspx。由于阿列克谢·库兹涅佐夫报告此问题。
- ,CPJNPOP3Exception :: GetErrorMessage现在使用经过:: tcsncpy_s如果使用VC 2005或更高版本编译的,。
- 下载中附带的示例应用程序是一个VC 2005解决方案
V1.42(2008年3月18日)
- 更新后的版权详细内容
- 现在的代码只支持VC 2005或更高版本。
- 简体CStringA的用法相当,通过响应解析
- 固定逻辑终止解析循环ReadListResponse
- 改进的ReadUIDLResponse的鲁棒性分析的逻辑
- 现在,包括支持APOP认证。感谢为“goodsiwen”提示此更新。
V1.43(5月18日)
- GetHeaderItem现在使用一个的CStringA参数,而不是CString的。由于阿列克谢·库兹涅佐夫报告此问题。
V1.44(2008年5月31日)
- 代码编译使用代码分析(/分析)
V1.45(2008年6月14日)
- 更新后的代码编译正确使用_ATL_CSTRING_EXPLICIT_CONSTRUCTORS定义
v1.46(2009年5月4日)
- 更新的著作权细节。
- 更新的示例应用程序的项目设置,以更现代的默认值。
- 删除了解析方法从CPJNPOP3Message类。全面支持消息的解析,请看看CDO为Windows 2000。
- 广泛修改了解析代码的使用CByteArray派生的类来解析响应来代替CStringA情况下的。处理不寻常的,但法律的情况下,邮件包含嵌入的空值。感谢谢尔盖·李森科报告此问题。
- 修正了一个错误解析消息ID ReadUIDLResponse
- 中的代码将正确验证,提供了一个时间戳,如果这样做APOP认证
v1.47(2009年12月22日)
- 优化ReadResponse逻辑,以减少所需的检索中找到的接收缓冲器中的端接器的量。这有助于避免过多的CPU利用率,当我们收到大的反应。感谢阿列克谢Rabets报告此问题。
- 现在可以在运行时指定通过SetReadBufferSize()读出缓冲器的大小用于在ReadResponse方法。
- 更新的API参考部分的文件,以解决各种出的最新细节。
V1.48(2011年2月13号)
- 更新后的版权详细内容
- 更新的样例应用程序,清理2010年VC + +的编译
- 更新后的代码,支持最新的SSL和插座类的作者。这意味着,现在的代码支持IPv6的POP3服务器
- 现在最新的OpenSSL的v1.0.0c的DLL链接的示例应用程序
- 设置/ GetBoundAddress已被重命名设置/ GetBindAddress的一致性与插座类