准备工作:下载一个OpenPop的插件,OpenPop.dll

这里测试了163邮箱和QQ邮箱,163邮箱直接用账号和授权码就能登录,QQ邮箱需要用SSL验证。

163的服务器是:pop3.163.com  , 端口是110

QQ邮箱服务器是:pop.qq.com ,端口是995,需要SSL验证,这段代码没有实现QQ邮箱SSL的验证登陆,非SSL的应该都是没有问题的,后续抽空我会再把SSL的方法贴出来,大家交流学习。

有个问题要提醒大家注意:

1.登录时候只能用第三方授权码登录,而不能用原始密码登录。

2.项目用的是OpenPop.dll 2.0.3版本,从Nuget上下载的OpenPop.dll版本是2.0.6。新版本中已经没有SaveToFile这个方法了,所以程序中SaveToFile方法会报错,需要的可以找我要。目前有两个解决方案:

(1)这个报错的方法是保存邮件附件的方法,不要用的话可以删掉。

(2)在新版本的OpenPop中SaveToFile()方法变成了Save(),直接把程序中的SaveToFile方法替换成Save就好了。

代码里我已经替换掉了(2019/04/25)

由于想要源码的比较多,源码上传QQ群了,群号:需要可私信博主,有需要的可以来下载(2020/09/07)

先上个效果图

代码很简单,你需要和我一样建立4个class,直接上代码:

首先定义接口,说明一下要实现的方法

using OpenPop.Mime;
using OpenPop.Mime.Header;
using OpenPop.Pop3;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;namespace Sample.SimpleFactory
{public abstract class Pop3{#region 窗体变量/// <summary>/// 是否存在错误/// </summary>public abstract Boolean ExitsError { get; set; }/// <summary>/// 错误信息/// </summary>public abstract String ErrorMessage { get; set; }/// <summary>/// POP3端口号/// </summary>public abstract Int32 Pop3Port { set; get; }/// <summary>/// POP3地址/// </summary>public abstract String Pop3Address { set; get; }/// <summary>/// 邮箱地址/// </summary>public abstract String EmailAddress { set; get; }/// <summary>/// 邮箱密码/// </summary>public abstract String EmailPassword { set; get; }#endregion#region 链接至服务器并读取邮件集合/// <summary>/// 链接至服务器并读取邮件集合/// </summary>public abstract Boolean Authenticate();#endregion#region 获取邮件数量/// <summary>/// 获取邮件数量/// </summary>/// <returns></returns>public abstract Int32 GetMailCount();#endregion#region 获取发件人/// <summary>/// 获取发件人/// </summary>/// <param name="mailIndex"></param>/// <returns></returns>public abstract String GetSendMialAddress(Int32 mailIndex);#endregion#region 获取邮件的主题/// <summary>/// 获取邮件的主题/// </summary>/// <param name="mailIndex"></param>/// <returns></returns>public abstract String GetMailUID(Int32 mailIndex);#endregion#region 取邮件的UID/// <summary>/// 获取邮件的UID/// </summary>/// <param name="mailIndex"></param>/// <returns></returns>public abstract String GetMailSubject(Int32 mailIndex);#endregion#region 获取邮件正文/// <summary>/// 获取邮件正文/// </summary>/// <param name="mailIndex">邮件顺序</param>/// <returns></returns>public abstract String GetMailBodyAsText(Int32 mailIndex);#endregion#region 获取邮件的附件public abstract Boolean GetMailAttachment(Int32 mailIndex, String receiveBackpath);#endregion#region 删除邮件/// <summary>/// 删除邮件/// </summary>/// <param name="mailIndex"></param>public abstract void DeleteMail(Int32 mailIndex);#endregion#region 关闭邮件服务器public abstract void Pop3Close();#endregion}
}

程序原本包括两种获取邮件的方法,POP3和Lumisoft,

这里就只保留POP3的方法了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Sample.SimpleFactory
{public class FactoryPop3{public String Pop3Type = "OpenPop";public Pop3 CreatePop3(){Pop3 pop = null;if (Pop3Type == "OpenPop"){return pop = new OpenPopPop3();}//else if (Pop3Type == "LumiSoft")//{//    return pop = new LumiSoftPop3();//}else{return null;}}       }
}

实现接口中虚方法的类

using OpenPop.Mime;
using OpenPop.Mime.Header;
using OpenPop.Pop3;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;namespace Sample.SimpleFactory
{public class OpenPopPop3 : Pop3{#region 窗体变量/// <summary>/// 是否存在错误/// </summary>public override Boolean ExitsError { get; set; }/// <summary>/// 错误信息/// </summary>public override String ErrorMessage { get; set; }/// <summary>/// POP3端口号/// </summary>public override Int32 Pop3Port { set; get; }/// <summary>/// POP3地址/// </summary>public override String Pop3Address { set; get; }/// <summary>/// 邮箱地址/// </summary>public override String EmailAddress { set; get; }/// <summary>/// 邮箱密码/// </summary>public override String EmailPassword { set; get; }#endregion#region 私有变量private Pop3Client pop3Client;// private List<POP3_ClientMessage> pop3MessageList = new List<POP3_ClientMessage>();private Int32 mailTotalCount;#endregion#region 构造函数public OpenPopPop3() { }#endregion#region 链接至服务器并读取邮件集合/// <summary>/// 链接至服务器并读取邮件集合/// </summary>public override Boolean Authenticate(){try{pop3Client = new Pop3Client();if (pop3Client.Connected)pop3Client.Disconnect();pop3Client.Connect(Pop3Address, Pop3Port, false);pop3Client.Authenticate(EmailAddress, EmailPassword, AuthenticationMethod.UsernameAndPassword);mailTotalCount = pop3Client.GetMessageCount();return ExitsError = true;}catch (Exception ex) { ErrorMessage = ex.Message; return ExitsError = false; }}#endregion#region 获取邮件数量/// <summary>/// 获取邮件数量/// </summary>/// <returns></returns>public override Int32 GetMailCount(){return mailTotalCount;}#endregion#region 获取发件人/// <summary>/// 获取发件人/// </summary>/// <param name="mailIndex"></param>/// <returns></returns>public override String GetSendMialAddress(Int32 mailIndex){RfcMailAddress address = pop3Client.GetMessageHeaders(mailIndex).From;return address.Address;}#endregion#region 获取邮件的主题/// <summary>/// 获取邮件的主题/// </summary>/// <param name="mailIndex"></param>/// <returns></returns>public override String GetMailUID(Int32 mailIndex){return pop3Client.GetMessageUid(mailIndex);}#endregion#region 获取邮件的UID/// <summary>/// 获取邮件的UID/// </summary>/// <param name="mailIndex"></param>/// <returns></returns>public override String GetMailSubject(Int32 mailIndex){return pop3Client.GetMessageHeaders(mailIndex).Subject;}#endregion#region 获取邮件正文/// <summary>/// 获取邮件正文/// </summary>/// <param name="mailIndex">邮件顺序</param>/// <returns></returns>public override String GetMailBodyAsText(Int32 mailIndex){Message message = pop3Client.GetMessage(mailIndex);MessagePart selectedMessagePart = message.MessagePart;return selectedMessagePart.GetBodyAsText();}#endregion#region 获取邮件的附件public override Boolean GetMailAttachment(Int32 mailIndex, String receiveBackpath){if (mailIndex == 0)return false;else if (mailIndex > mailTotalCount)return false;else{try{Message message = pop3Client.GetMessage(mailIndex);//邮件的全部附件.List<MessagePart> attachments = message.FindAllAttachments();foreach (MessagePart attachment in attachments){string fileName = attachment.FileName;string fileFullName = receiveBackpath + "\\" + fileName;FileInfo fileInfo = new FileInfo(fileFullName);if (fileInfo.Exists) fileInfo.Delete();attachment.Save(fileInfo);}pop3Client.DeleteMessage(mailIndex);return true;}catch (Exception ex){ErrorMessage = ex.Message;return false;}}return true;}#endregion#region 删除邮件/// <summary>/// 删除邮件/// </summary>/// <param name="mailIndex"></param>public override void DeleteMail(Int32 mailIndex){pop3Client.DeleteMessage(mailIndex);}#endregion#region 关闭邮件服务器public override void Pop3Close(){pop3Client.Disconnect();pop3Client.Dispose();}#endregion}
}

这里是Main函数,代码里可以用循环将所有邮件都取出来,

这里只取第一封邮件演示一下,取出的邮件我放在了DataTable里了,方便查看。

这里测试了163邮箱和QQ邮箱,

163邮箱直接用账号和授权码就能登录,QQ邮箱需要用SSL验证,

163的服务器是:pop3.163.com  , 端口是110

QQ邮箱服务器是:pop.qq.com ,端口是995,需要SSL验证,这段代码没有实现QQ邮箱的登陆,后续抽空我会再把SSL的方法贴出来,大家交流学习。

main()
{FactoryPop3 factory = new FactoryPop3();Pop3 pop = factory.CreatePop3();pop.Pop3Port = 110;pop.Pop3Address = "pop3.163.com";pop.EmailAddress = "*******@163.com";pop.EmailPassword = "*******";pop.Authenticate();if (pop.ExitsError){DataTable aa = new DataTable();aa.Columns.Add("MailCount");aa.Columns.Add("SendMialAddress");aa.Columns.Add("MailUID");aa.Columns.Add("MailSubject");aa.Columns.Add("MailBodyAsText");DataRow dr = aa.NewRow();dr["MailCount"] = pop.GetMailCount().ToString();dr["SendMialAddress"] = pop.GetSendMialAddress(1).ToString();dr["MailUID"] = pop.GetSendMialAddress(1).ToString();dr["MailSubject"] = pop.GetSendMialAddress(1).ToString();dr["MailBodyAsText"] = pop.GetSendMialAddress(1).ToString();aa.Rows.Add(dr);//MessageBox.Show(pop.GetMailCount().ToString());//MessageBox.Show(pop.GetSendMialAddress(1).ToString());//MessageBox.Show(pop.GetMailUID(1).ToString());//MessageBox.Show(pop.GetMailSubject(2).ToString());//MessageBox.Show(pop.GetMailBodyAsText(1).ToString());}else{//MessageBox.Show(pop.ErrorMessage);}}

用POP3获取邮箱邮件内容(完整C#源码)相关推荐

  1. 用POP3获取邮箱邮件内容,支持SSL验证登陆(完整C#源码)

    延续上一篇用POP3获取邮箱邮件内容(C#源码) 上一篇中提到一个问题,网上一般流传的是非SSL验证登陆的,适用163之类的邮箱,但是QQ邮箱一般都是登陆不上的.这次我来提供一个支持SSL验证登陆的方 ...

  2. webbrowser抓取php网页源码,获取webbrowser控件 网页的源码(收藏)

    获取webbrowser控件 网页的源码(收藏) 翻译|其它|编辑:郝浩|2005-04-28 09:45:00.000|阅读 3152 次 概述: 我在网上找到使用rft控件保存webbrowse文 ...

  3. 梦幻诛仙linux纯端架设教程,梦幻诛仙 一键端搭建iOS安卓双端+完整后台源码+各种工具附带视频架设教程...

    游戏说明: 梦幻诛仙一键端搭建iOS安卓双端+完整后台源码+各种工具,视频架设教程 在游戏内当前聊天窗口输入  dmmhzxnb ,开启后台.  提示GM后台已开启. 在左上角Press Enter ...

  4. (完整项目源码)GPS定位源码整套管理系统,轨迹播放,车辆管理,电子围栏,报警记录,数据库/人员定位/宠物定位/物流跟踪/资产定位

    (完整项目源码)GPS定位源码整套管理系统,轨迹播放,车辆管理,电子围栏,报警记录,Mysql数据库- 框架:spring+jpa+struts2 ,MVC架构设计,可扩展性强. 数据库:mysql5 ...

  5. unity3d游戏2d横版射击游戏完整项目源码分享

    unity3d游戏2d横版射击游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1YwhEy7DeKIHFU8pBLdJFPg 提取码:3wnx 复制这段内容 ...

  6. unity3d游戏3d局域网联机吃球游戏完整项目源码分享

    unity3d游戏3d局域网联机吃球游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1APlOCmoK9aUfiVJD48dBQA 提取码:p5nl 复制这 ...

  7. 基于SpringBoot+Vue的科研课题项目管理系统【完整项目源码】

    介绍 基于SpringBoot+Vue的科研课题项目管理系统 : 实现 登录 /注销. 用户管理.项目管理.申报管理.变更管理.结题管理.角色管理.权限管理.数据字典等功能 : 可作为 SpringB ...

  8. mysql src.rpm_从.src.rpm包中提取出完整的源码的方法

    1 什么是完整的源码 就是说,最初始的源码加上打了所有的patch后的源码,即最新的源码. 2 过程 2.1 从.src.rpm中提取完整的rpm工程文件 2.1.1 rpm to cpio rpm2 ...

  9. 域名正版验证系统,PHP域名查询验证完整无误源码下载,域名验证系统完整源码

    域名正版验证系统,PHP域名查询验证完整无误源码下载,域名验证, 由于优雅草系列产品盗版横行需要建立开源制度和正版授权查询,曾经寻找过没有可用的原计划自行写一个,不料到突然发现一个宝贝,完整可用并且优 ...

  10. python提取发票信息发票识别_(附完整python源码)基于tensorflow、opencv的入门案例_发票识别二:字符分割...

    (附完整python源码)基于tensorflow.opencv的入门案例_发票识别二:字符分割 发布时间:2018-05-14 20:16, 浏览次数:1201 , 标签: python tenso ...

最新文章

  1. 自然语言处理起源:马尔科夫和香农的语言建模实验
  2. 深入理解javascript函数参数
  3. 商汤科技2020数据分析师0820笔试题目整理
  4. 【Servlet】Session会话跟踪技术
  5. axios在派遣方法时候的异步
  6. 在Simulink中调整增益映射 Tune Gain Schedules in Simulink
  7. spring cloud分布式整合zipkin的链路跟踪
  8. 微信们正在成为“被模仿者”!中国互联网现状及趋势报告
  9. 让.net 2.0支持并行计算
  10. 水电图纸——安装配电箱,插座——3.8
  11. 深入解析Scheduler
  12. 服务器操作系统有哪些?
  13. 05、Flutter FFI 结构体
  14. python访问陌生人qq空间_用Python登录好友QQ空间点赞的示例代码
  15. AUTOSAR DCM Configuration
  16. 再聊虚拟资源知识付费赚钱
  17. temp.....................
  18. 基于 Webpack4 的可插拔式微前端架构 - Puzzle
  19. div背景图片等比例缩小如何居中
  20. python3攻击服务器_Python服务器用套接字互相攻击

热门文章

  1. Base64编码工具类
  2. (23)Java学习笔记——常用对象API / StringBuffer类
  3. ISP之色差增益抑制(Chroma Gain Suppression)
  4. Oracle查询执行计划
  5. 微信扫描二维码后无法打开网页
  6. Git 客户端管理工具:Git Gui、TortoiseGit、GitHub Desktop
  7. 如何干净完整卸载office2010
  8. pandas官方中文手册pdf下载
  9. 全开源JAVA支付系统/jeepay聚合支付四方支付系统
  10. 下载envi中遇到的问题