使用C#和OpenPop.dll开发读取POP3邮件程序
制作一个ASP.NET MVC4论坛项目,该项目需要将以往十多年的Mail List(邮件列表)内容都导入到新的论坛中,因此需要能够将邮件的标题、发布时间、发布人及邮件内容导入到论坛的数据库内。.Net并没有提供内置的读取POP3邮件内容的类库,因此,只有在网上查询可用的类库。
查询的结果,OpenPop.dll(官网下载地址:http://sourceforge.net/projects/hpop/)是符合要求的一种。
下面的代码只给出了最核心、最简捷的内容,以Console方式完成。 利用Pop3Client对象的Connect方法,给出PoP3 Server、端口号、是否需要SSL连接;Authenticate方法则给出POP3的账号及密码。
在使用中,标题、发送人及发送时间及许多其它信息(如cc bcc to等等)都可以使用简单的方法取出(如下面代码所示),因为它们都是以plaintext的方式发送的,但对于邮件内容(body)和附件(attachment),由于涉及到multipart格式,因此,为能简单地取出。在下面的代码中,对于邮件内容的提取方式,最主要的是两种:一种是text格式,另外一种是multipart格式,这两种格式的提取办法是不同的。
下面的代码由笔者实际调试,真实可用。
using System;
using OpenPop.Pop3;
using OpenPop.Mime;
using System.Collections.Generic; #region using OpenPop.dll to read email
public static void ReadPop3()
{
using (Pop3Client client = new Pop3Client())
{
if (client.Connected)
{
client.Disconnect();
} // Connect to the server, false means don't use ssl
client.Connect("pop3.263.net", , false); // Authenticate ourselves towards the server by email account and password
client.Authenticate("wusir@263.net", ""); //email count
int messageCount = client.GetMessageCount(); //i = 1 is the first email; 1 is the oldest email
for (int i = ; i <= messageCount; i++)
{
Message message = client.GetMessage(i); string sender = message.Headers.From.DisplayName;
string from = message.Headers.From.Address;
string subject = message.Headers.Subject;
DateTime Datesent = message.Headers.DateSent; MessagePart messagePart = message.MessagePart; //email body,
string body = " ";
if (messagePart.IsText)
{
body = messagePart.GetBodyAsText();
}
else if (messagePart.IsMultiPart)
{
MessagePart plainTextPart = message.FindFirstPlainTextVersion();
if (plainTextPart != null)
{
// The message had a text/plain version - show that one
body = plainTextPart.GetBodyAsText();
}
else
{
// Try to find a body to show in some of the other text versions
List<MessagePart> textVersions = message.FindAllTextVersions();
if (textVersions.Count >= )
body = textVersions[].GetBodyAsText();
else
body = "<<OpenPop>> Cannot find a text version body in this message.";
}
} }
}
}
#endregion
更多帮助内容,可以参见官网帮助文档:http://hpop.sourceforge.net/documentation/index.html
另外,如果直接读取Outlook(OE)或者Windows Live Mail格式的邮件内容(扩展名.eml),可以使用LumiSoft.Net.dll完成
使用C#和OpenPop.dll开发读取POP3邮件程序的更多相关文章
- 使用OpenPop.dll开发读取POP3邮件程序
1.设置邮件的pop3 以163网易邮箱为例: https://jingyan.baidu.com/article/adc81513804be9f722bf7350.html 2.下载OpenPop. ...
- NET Core开发-读取配置文件Configuration
ASP.NET Core开发-读取配置文件Configuration ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NE ...
- Unity用Excel.dll简单读取Excel内容
Unity用Excel.dll简单读取Excel内容 需要Excel.dll 需要如下三个命名空间 using System.IO; using Excel; using System.Data; 1 ...
- C#邮件接收系统核心代码(接收POP3邮件IMAP邮件)
/* * Created by SharpDevelop. * User: Administrator * Date: 2013/11/18 * Time: 20:55 * * To change t ...
- 无法启动此程序,因为计算机中丢失AdbWinApi.dll。尝试重新安装该程序以解决此问题
第一次搭建android开发环境,装完adb以后,打开DOS验证安装是否成功:但输入adb logcat调试时,系统弹出以下异常的对话框: 无法启动此程序,因为计算机中丢失AdbWinApi.dll. ...
- 使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台
使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台. 前面讲解了VSCode开发调试 .NET Core.都只是在windows下运行. .NET Core真正的核心是跨平 ...
- 开发安全的Web程序
目录0x1:什么是安全的Web应用程序0x2:过滤输入的数据0x3:转义输出的数据0x4:Register Globals0x5:magic_quotes_gpc0x6:错误信息的报告0x7:文件的安 ...
- 部署到Linux使用VS Code 开发.NET Core 应用程序
使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台 使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台. 前面讲解了VSCode开发调试 .NE ...
- 【实验手册】使用Visual Studio Code 开发.NET Core应用程序
.NET Core with Visual Studio Code 目录 概述... 2 先决条件... 2 练习1: 安装和配置.NET Core以及Visual Studio Code 扩展... ...
随机推荐
- Office 开发版本号与版本对应关系
Office 开发版本号与版本对应关系: office97 : 8.0 office2000 : 9.0 officeXP(2002) : 10.0 office2003 : 11.0 office2 ...
- MySQL_杭州11月销售昨日未上架的SKU_20161212
#C034杭州11月销售昨日未上架的SKU SELECT 城市,a.订单日期,a.客户数,a.订单数,b.产品数,a.金额,c.销售确认额,c.毛利额,c.毛利率 FROM ( SELECT 城市,订 ...
- python json学习之路1-认识json格式数据
JSON 语法规则 JSON 语法是 JavaScript 对象表示语法的子集. 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组JSONJSON 名称/值对 JSON 数据的书写格式是 ...
- C/ C++ 常见编程问题
C 中容易忽略的问题 1.在C语言中,浮点型变量分为两类: a. 单精度型:类型说明符为float, 在Turbo C 中占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,可提 ...
- 循序渐进Python3(三) -- 3 -- 内置函数
上一篇我们又介绍了26个Python内置函数.现回忆一下吧: 1.all 2.any 3.ascii 4.bin 5.bool 6.bytes 7.bytearray 8.callable 9.chr ...
- DNS劫持和DNS污染的区别
我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.常用的手段有:DNS劫持和DNS污染. 什么是DNS劫持 DNS劫持就是通过劫 ...
- com.apache.dc.query.Query所属包名apache-common-sid.jar
com.apache.dc.query.Query所属包名apache-common-sid.jar 首先这个类是基于HQL的,好多方法里面要传String clzz, 刚开始我真不知道这个参数传什么 ...
- 今天想用jquery来实现div的拖放功能
html5标签.拖放(Drag 和 drop)是 HTML5 标准的组成部分. 步骤一:首先设置标签可以被拖 draggable="true" 步骤二:选取被拖的标签,和要放置被拖 ...
- python 异常含义
异常 描述 NameError 尝试访问一个没有申明的变量 ZeroDivisionError 除数为0 SyntaxError 语法错误 IndexError 索引超出序列范围 KeyError 请 ...
- 由struts错误使用引发的漏洞,使用参数作为返回的文件路径或文件名,作为返回result 值
该错误可以导致他人任意访问该路径下的任何文件. struts 文件 <?xml version="1.0" encoding="UTF-8" ?> ...