热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

POP3邮件接收

添加邮件实体收到的邮件实体publicclassMailInfo{发件地址publicstringFrom{

添加邮件实体

///

/// 收到的邮件实体/// public class MailInfo{/// /// 发件地址/// public string From{get;set;}/// /// 收件地址/// public string To{get;set;}/// /// 发件日期/// public DateTime Date{get;set;}/// /// 内容/// public string Content{get;set;}}

Pop3协议使用的是110端口,使用pop3连接邮件服务器首先要用TcpClient与邮件服务器建议一个连接,向流中写命令,然后可读取流中邮件服务器写入的返回信息。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;namespace Email.Pop3
{
///

/// 读取邮件客户端/// public class Pop3Client{private TcpClient Server;private NetworkStream NetStrm;private StreamReader RdStrm;private string Data;private byte[] szData;private string CRLF = "\r\n";/// /// 收件箱中邮件数量/// private int mailCount;private bool conn = false;/// /// 是否已连接/// public bool Connected{get { return conn; }}//// /// 连接邮件服务器/// /// 邮件服务器/// 账号/// 密码/// 是否连接成功public bool Connect(string server, string account, string passWord){//用110端口新建POP3服务器连接Server = new TcpClient(server, 110);try{//初始化NetStrm = Server.GetStream();RdStrm = new StreamReader(Server.GetStream());string init = RdStrm.ReadLine();//登录服务器过程Data = "USER " + account + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);string user = RdStrm.ReadLine();Data = "PASS " + passWord + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);string pass = RdStrm.ReadLine();if (pass[0] == '+'){//向服务器发送STAT命令,从而取得邮箱的相关信息:邮件数量和大小Data = "STAT" + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);//依据返回信息,初始化队列大小string[] inboxParams = RdStrm.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);int.TryParse(inboxParams[1], out mailCount);conn = true;}}catch (InvalidOperationException ex) { conn = false; throw ex; }return conn;}/// /// 断开连接/// public void DisConnect(){//向服务器发送QUIT命令从而结束和POP3服务器的会话Data = "QUIT" + CRLF;szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);string msg = RdStrm.ReadLine();//断开连接
NetStrm.Close();RdStrm.Close();}/// /// 收信/// /// public Queue Receive(){Queue mailQueue &#61; new Queue();string szTemp;for (int i &#61; 1; i <&#61; mailCount; i&#43;&#43;){//根据邮件编号从服务器获得相应邮件Data &#61; "RETR " &#43; i &#43; CRLF;szData &#61; System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);szTemp &#61; RdStrm.ReadLine();StringBuilder mailTxt &#61; new StringBuilder();if (szTemp.Length > 0 && szTemp[0] !&#61; &#39;-&#39;){//不断地读取邮件内容&#xff0c;直到结束标志&#xff1a;英文句号while (szTemp !&#61; "."){mailTxt.Append(szTemp &#43; "\n");szTemp &#61; RdStrm.ReadLine();}MailInfo m &#61; new MailInfo(){From &#61; MessageParse.GetFrom(mailTxt.ToString()),To &#61; MessageParse.GetTo(mailTxt.ToString()),Date &#61; MessageParse.GetDate(mailTxt.ToString()),Content &#61; MessageParse.GetContent(mailTxt.ToString())};mailQueue.Enqueue(m);}}return mailQueue;}/// /// 删除读取后的邮件/// public void Delete(){for (int i &#61; 1; i <&#61; mailCount; i&#43;&#43;){Data &#61; "DELE " &#43; i &#43; CRLF;szData &#61; System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());NetStrm.Write(szData, 0, szData.Length);}}}
}

读取邮件的标题、内容等需要解析。下面是一个提取邮件标题、内容、发件箱等的解析类。不太完整&#xff0c;仅供参考。

///

/// 读取邮件内容/// public class MessageParse{/// /// 获取发件人/// /// /// public static string GetFrom(string message){if (!message.Contains("\nFrom:")){return string.Empty;}string cutMsg &#61; message.Substring(message.IndexOf("\nFrom:") &#43; 7);cutMsg &#61; cutMsg.Remove(cutMsg.IndexOf("\n"));if (cutMsg.Contains(&#39;<&#39;) && cutMsg.Contains(&#39;>&#39;)){int indexS &#61; cutMsg.IndexOf(&#39;<&#39;);int indexE &#61; cutMsg.IndexOf(&#39;>&#39;);if (indexE - 1 > indexS){cutMsg &#61; cutMsg.Substring(indexS &#43; 1, indexE - indexS - 1);}}cutMsg&#61;cutMsg.Trim(&#39;>&#39;);cutMsg&#61;cutMsg.Trim(&#39;<&#39;);return cutMsg;}/// /// 获取收件人/// /// /// public static string GetTo(string message){if (!message.Contains("\nTo:")){return string.Empty;}string cutMsg &#61; message.Substring(message.IndexOf("\nTo:") &#43; 5);cutMsg &#61; cutMsg.Remove(cutMsg.IndexOf("\n"));if (cutMsg.Contains(&#39;<&#39;) && cutMsg.Contains(&#39;>&#39;)){int indexS &#61; cutMsg.IndexOf(&#39;<&#39;);int indexE &#61; cutMsg.IndexOf(&#39;>&#39;);if (indexE - 1 > indexS){cutMsg &#61; cutMsg.Substring(indexS &#43; 1, indexE - indexS - 1);}}cutMsg&#61;cutMsg.Trim(&#39;>&#39;);cutMsg&#61;cutMsg.Trim(&#39;<&#39;);return cutMsg;}/// /// 获取收件日期/// /// /// public static DateTime GetDate(string message){if (!message.Contains("\nTo:")){return DateTime.MinValue;}string cutMsg &#61; message.Substring(message.IndexOf("\nDate:") &#43; 7);cutMsg &#61; cutMsg.Remove(cutMsg.IndexOf("\n"));DateTime time &#61; DateTime.Now;try{time &#61; Convert.ToDateTime(cutMsg);}catch { }return time; }/// /// 获取内容/// /// /// public static string GetContent(string message){if (!message.Contains("\nContent")){return string.Empty;}string cutMsg &#61; message.Substring(message.LastIndexOf("\nContent"));cutMsg &#61; cutMsg.Substring(cutMsg.IndexOf("\n\n") &#43; 2);if (cutMsg.IndexOf("\n\n") > 0){cutMsg &#61; cutMsg.Remove(cutMsg.IndexOf("\n\n"));}if (message.Contains("\nContent-Transfer-Encoding: base64")){if (message.Contains("charset&#61;")){string charSet &#61; message.Substring(message.LastIndexOf("charset&#61;") &#43; 8);charSet &#61; charSet.Remove(charSet.IndexOf(&#39;\n&#39;)).Trim(&#39;"&#39;);try{Encoding encoding &#61; Encoding.GetEncoding(charSet);cutMsg &#61; Encoding.GetEncoding(charSet).GetString(Convert.FromBase64String(cutMsg));}catch{try{cutMsg &#61; Encoding.Default.GetString(Convert.FromBase64String(cutMsg));}catch { }}}}return cutMsg;}}

 


转载于:https://www.cnblogs.com/xingbinggong/archive/2013/04/23/3037838.html


推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
author-avatar
275514908_9369d7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有