lumisoft 类库可以到 http://www.lumisoft.ee/lsWWW/download/downloads/Net下载 



using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using LumiSoft.Net.Mime;
using LumiSoft.Net.POP3.Client;
using LumiSoft.Net.MIME;
using LumiSoft.Net.SMTP.Client;
using System.Data.SqlClient;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.IO;
using System.Text.RegularExpressions;
using System.Text;
using System.Xml;
using System.Collections.Generic;
using System.Diagnostics;/// <summary>
/// Summary description for POP3Email
/// </summary>
/// public class POP3Email
{public POP3Email(){//// TODO: Add constructor logic here//}#region 字段属性private static string from { get; set; }private static string name { get; set; }private static string area { get; set; }private static string position { get; set; }private static string uniqueID { get; set; }#endregion#region 接收邮件方法public static void ReceiverEmail(string host, int port, bool ssl, string userName, string pass,string email){POP3_Client client = new POP3_Client();List<Mime> mime = new List<Mime>();string rootDirec = ConfigurationManager.AppSettings["EmailSave"];string userDirec = AppDomain.CurrentDomain.BaseDirectory + "\\"+rootDirec; if (!Directory.Exists(rootDirec)){Directory.CreateDirectory(rootDirec);}if (Dic_resume_base.Count == 0){InitialDic();}if (!identDic.Keys.Contains(email)) //程序第一次执行时执行该操作{GetEmailIdent(email);}try{//与POP3服务进行连接client.Connect(host, port, ssl);//身份验证client.Authenticate(userName, pass, true);POP3_ClientMessageCollection msgCollections = client.Messages; //获取邮箱里面的所有邮件      foreach (POP3_ClientMessage msg in msgCollections){if (identDic[email].Contains(msg.UID))    //如果集合已经存在改邮件ID标识,那么就继续循环不对该邮件操作。{continue;}if (InsertIdent(msg.UID, email)){uniqueID = msg.UID;identDic[email].Add(msg.UID);//记录邮件的ID标识}  byte[] bytes = msg.MessageToByte();//读取邮件里的内容Mime m = Mime.Parse(bytes);//解析从POP3服务器发送过来的邮件信息if (!RegValidata(m.MainEntity.Subject))//验证如果不是招聘网投递过来的简历不进行文件保存{continue;}             string attacht = "";//附件名string content = "";//正文if (m != null){string mail_from = "";string mail_formName = "";if (m.MainEntity.From != null){for (int i = 0; i < m.MainEntity.From.Count; i++){if (i == 0){mail_from = (m.MainEntity.From).Mailboxes[i].EmailAddress;}else{mail_from = string.Format(",{0}", (m.MainEntity.From).Mailboxes[i].EmailAddress);}mail_formName = (m.MainEntity.From).Mailboxes[0].DisplayName != "" ? (m.MainEntity.From).Mailboxes[0].DisplayName : (m.MainEntity.From).Mailboxes[0].LocalPart;}} string mail_to = "";string mail_toCollection = "";if (m.MainEntity.To != null){mail_toCollection = m.MainEntity.To.ToAddressListString();for (int i = 0; i < m.MainEntity.To.Mailboxes.Length; i++){if (i == 0){mail_to = (m.MainEntity.To).Mailboxes[i].EmailAddress;}else{mail_to += string.Format("{0}", (m.MainEntity.To).Mailboxes[i].EmailAddress);}}}SaveInfo(m.BodyHtml);//为接收邮箱配置个人目录if (!Directory.Exists(userDirec)){Directory.CreateDirectory(userDirec);}//把接收的内容存在至文件夹string userFile = userDirec + "\\" + msg.UID + ".html";Regex rg_modif_url = new Regex("(\")(.*?\\.jpg)");//正则表达式修改内容的图片路径using (FileStream fs = File.Open(userFile, FileMode.Create)){StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);sw.Write(rg_modif_url.Replace(m.BodyHtml, "$1Attachments\\$2"));sw.Flush();sw.Close();}}//获取并保存附件string path = userDirec + "\\" + "Attachments";foreach (MimeEntity entry in m.Attachments){string fileName = entry.ContentDisposition_FileName; //获取附件名称if (!Directory.Exists(path))//不存在文件夹则创建一个新的文件夹{Directory.CreateDirectory(path);}string filePath = path + "\\" + fileName;if (File.Exists(filePath)){continue;//Random random = new Random();//int newfile = random.Next(1, 100000);//filePath = path + "\\" + newfile.ToString() + (m.MainEntity.From).Mailboxes[0].DisplayName + fileName;}byte[] data = entry.Data;FileStream pFileStream = null;pFileStream = new FileStream(filePath, FileMode.Create);pFileStream.Write(data, 0, data.Length);pFileStream.Close();}}}catch (Exception e){throw e;}finally{client.Dispose();}}#endregion//获取所有被设置为接收的邮箱public static DataTable GetReceivers(){string sql = "SELECT * FROM Email WHERE e_emailStatu=0";Database db = DatabaseFactory.CreateDatabase();DataTable dt = db.ExecuteDataSet(CommandType.Text, sql).Tables[0];return dt;}private static string template { get; set; }//模板private static bool RegValidata(string sourceText){string patternZP = @"^((?'from'.*))(?:应聘)(?'pos'.*)-(?'area'.*)-(?'name'.*)$";string pattern51 = @"(^\((?'from'.*)\)申请贵公司(?'pos'.*)((?'area'.*))-(?'name'.*)$|^((?'from'.*))(?:应聘)(?'pos'.*)-(?'area'.*)-(?'name'.*)$)";Regex regZP = new Regex(patternZP);Regex reg51 = new Regex(pattern51);bool flag = false;Match match = null;if (reg51.IsMatch(sourceText)){template = "51job"; flag = true; match = reg51.Match(sourceText);}else if (regZP.IsMatch(sourceText)){template = "zhaopin"; flag = true; match = regZP.Match(sourceText);}else{flag = false;}if (match != null){from = match.Groups["from"].Value; name = match.Groups["name"].Value; area = match.Groups["area"].Value; position = match.Groups["pos"].Value;}return flag;}private static Dictionary<string, List<string>> identDic = new Dictionary<string, List<string>>();private static void GetEmailIdent(string email){List<string> identList = new List<string>();Database db = DatabaseFactory.CreateDatabase();string sql = "SELECT Ident FROM EmailIdent WHERE Email='" + email+"'";IDataReader reader = db.ExecuteReader(CommandType.Text, sql);while (reader.Read()){identList.Add(reader["Ident"].ToString());continue;}identDic.Add(email, identList);}//想数据库插入标识private static bool InsertIdent(string ident,string email){string sql = "INSERT EmailIdent(Ident,Email) VALUES ('" + ident + "','"+email+"')";Database db = DatabaseFactory.CreateDatabase();return db.ExecuteNonQuery(CommandType.Text, sql)>0;}/// <summary>/// 把简历信息持久化/// </summary>/// <param name="body">邮件的内容</param>private static List<Dictionary<string, string>> alist = new List<Dictionary<string, string>>();/// <summary>/// 将简历内容保存至数据库/// </summary>/// <param name="bodyHtml">简历内容主体</param>/// <returns>是否插入成功!</returns>private static bool SaveInfo(string bodyHtml){bodyHtml = new Regex("(^\\s*|\\r|\\n|\\t|( ))").Replace(bodyHtml,"");if (template=="51job"){//判断51job是旧版或者新版的简历模板if (new Regex("\\|[男|女]\\|").IsMatch(bodyHtml)){template += "02";}}//获取模板XmlDocument doc = new XmlDocument();string webRoot = System.AppDomain.CurrentDomain.BaseDirectory;string path = "Web\\Modules\\Email\\XMLtemplate\\"+template+".xml";path = Path.Combine(webRoot, path);doc.Load(path);XmlElement element = doc.DocumentElement;string xpath = "a:Value";XmlNodeList nodeList = element.GetElementsByTagName(xpath);Dictionary<string, string> regDic = new Dictionary<string, string>();//保存正则表达式的集合foreach (XmlNode pNode in nodeList){string key = ""; string value = "";foreach (XmlNode childNode in pNode.ChildNodes){if(childNode.LocalName != "AlgExp" && childNode.LocalName != "AttName"){continue;}if (childNode.LocalName == "AlgExp"){value = childNode.InnerText.Trim(); continue;}if (childNode.LocalName == "AttName"){key = childNode.InnerText.Trim(); continue;}continue;}regDic.Add(key, value);continue;}Dictionary<string, string> dic_result_base = new Dictionary<string, string>();foreach (string key in regDic.Keys){if (Dic_resume_base.ContainsKey(key))//基础数据集合跟正则表达式集合对应键值是否相等{Regex reg = new Regex(regDic[key]);Match match = reg.Match(bodyHtml);string value = match.Groups["attname"].Value==""?"未填写":match.Groups["attname"].Value;dic_result_base.Add(Dic_resume_base[key], value);continue;}}//获取工作经验信息部分代码doc = new XmlDocument();path = "Web\\Modules\\Email\\XMLtemplate\\DataField.xml";doc.Load(Path.Combine(webRoot, path));element = doc.DocumentElement;xpath = "//regExp/reg";nodeList = element.SelectNodes(xpath);string temp = bodyHtml;MatchCollection mColle = null;foreach (XmlNode node in nodeList){Regex rg = new Regex(node.InnerText.Trim(), RegexOptions.Multiline | RegexOptions.IgnoreCase);if (node.Attributes["type"].Value == "replace"){temp = rg.Replace(temp, node.Attributes["rValue"].Value);}else{if (node.Attributes["isEnd"].Value == "yes"){mColle = rg.Matches(temp);}else{temp = rg.Match(temp).Groups["attname"].Value;}}continue;}List<List<string>> list_work = new List<List<string>>();Regex reg_date = new Regex("\\d+/\\d+--\\d+/\\d+[:|:]");string tempStr = "";if (mColle != null && mColle.Count > 0){List<string> list_info = new List<string>();for (int i = 0; i < mColle.Count; i++){if (reg_date.IsMatch(mColle[i].Groups["attname"].Value) && list_info.Count !=0){if (list_info.Count == 4){list_work.Add(list_info);}else{list_info.RemoveRange(4, list_info.Count-4);list_info[list_info.Count - 1] = list_info[list_info.Count - 1] + tempStr;list_work.Add(list_info);tempStr = "";}i--;list_info = new List<string>();}else{list_info.Add(mColle[i].Groups["attname"].Value);}if (list_info.Count > 4){tempStr += "\n" + mColle[i].Groups["attname"].Value;}if (i == mColle.Count-1){if (list_info.Count == 4){list_work.Add(list_info);}else{list_info.RemoveRange(4, list_info.Count - 4);list_info[list_info.Count - 1] =  list_info[list_info.Count - 1] + tempStr;list_work.Add(list_info);tempStr = "";}}}}//构造SQL语句把数据保存StringBuilder sb = new StringBuilder();string sql_base = @"INSERT INTO Resume_baseInfo
([name],sex,birthdate,nativePlace,address,diploma,specialized,stature,marriage,jobObjective,workYear,[from],area,emailAddress,uniqueID,position,telphone,school,workExperience,projectExperience)
VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}');";sql_base = string.Format(sql_base, name, dic_result_base["sex"], dic_result_base["birthdate"], dic_result_base["nativePlace"], dic_result_base["address"], dic_result_base["diploma"], dic_result_base["specialized"], dic_result_base["stature"], dic_result_base["marriage"], dic_result_base["jobObjective"], dic_result_base["workYear"], from, area, dic_result_base["emailAddress"], uniqueID, position, dic_result_base["telphone"], dic_result_base["school"], FormatString(dic_result_base["workExperience"]), FormatString(dic_result_base["projectExperience"]));sb.Append(sql_base);string sql_workExp = @"INSERT INTO resume_workExperience(uniqueID,dateAndPlace,trade,department,duty)VALUES('{0}','{1}','{2}','{3}','{4}');";for (int i = 0; i < list_work.Count; i++){for (int j = 0; j < list_work[i].Count; j++){string dateAndPlace = list_work[i][j];string trade = list_work[i][++j];string department = list_work[i][++j];string duty = list_work[i][++j].Replace("'","''");string tempSql = string.Format(sql_workExp, uniqueID, dateAndPlace, trade, department, duty);sb.Append(tempSql);}}Database db = DatabaseFactory.CreateDatabase();return db.ExecuteNonQuery(CommandType.Text, sb.ToString()) > 0;}private static string FormatString(string str){Regex reg = new Regex("(<.*?>)");str = reg.Replace(str, "");reg = new Regex("'");str = reg.Replace(str, "‘");reg = new Regex("\"");str = reg.Replace(str, "“");return str;}private static Dictionary<string, string> Dic_resume_base = new Dictionary<string, string>();/// <summary>/// 初始化字典数据保持数据库跟简历信息一一对应/// </summary>private static void InitialDic(){XmlDocument doc = new XmlDocument();string webRoot = System.AppDomain.CurrentDomain.BaseDirectory;string path = "Web\\Modules\\Email\\XMLtemplate\\DataField.xml";path = Path.Combine(webRoot, path);doc.Load(path);XmlElement elem = doc.DocumentElement;string xpath = "//baseinfo/field";XmlNodeList nodeList = elem.SelectNodes(xpath);foreach (XmlNode node in nodeList){Dic_resume_base.Add(node.Attributes["key"].Value, node.Attributes["value"].Value);continue;}}#region 发送邮件方法public static void SendEmail(string host,int port,bool ssl,string username,string pass,string from,string[] tos,string subject,string content) { SendEmail(host,port,ssl,username,pass,from,tos,subject,content,null);}/// <summary>/// 邮件的发送方法/// </summary>/// <param name="host"></param>/// <param name="port">端口</param>/// <param name="ssl">SSL验证</param>/// <param name="username">邮箱登录名</param>/// <param name="pass">邮箱登录密码</param>/// <param name="from">发送邮箱的地址</param>/// <param name="tos">接收邮箱的地址集合,支持群发单发</param>/// <param name="subject">邮件的标题</param>/// <param name="content">邮件的内容</param>/// <param name="attchs">附件、支持多附件发送</param>public static void SendEmail(string host, int port, bool ssl, string username, string pass, string from, string[] tos, string subject,string content, Dictionary<string, Stream> attchs){foreach (string to in tos){using (SMTP_Client smtp = new SMTP_Client()){smtp.Connect(host, port, ssl);smtp.Authenticate(username, pass);smtp.MailFrom(from, -1);smtp.RcptTo(to);MemoryStream stream = CreateMessage(from,to, subject, content, attchs);smtp.SendMessage(stream);}}}private static MemoryStream CreateMessage(string from,string to,string subject,string content,Dictionary<string,Stream> attchs){Mime mime = new Mime();MimeEntity mailEntity = mime.MainEntity;mailEntity.From = new AddressList();mailEntity.From.Add(new MailboxAddress(from));mailEntity.To = new AddressList();mailEntity.To.Add(new MailboxAddress(to));mailEntity.ContentType = MediaType_enum.Multipart_mixed;mailEntity.Subject = subject;MimeEntity textEntity = new MimeEntity();textEntity.ContentTransferEncoding = ContentTransferEncoding_enum.Base64;textEntity.ContentType = MediaType_enum.Text_html;textEntity.DataText = content;mailEntity.ChildEntities.Add(textEntity);if (attchs != null && attchs.Count != 0){foreach (string key in attchs.Keys){MimeEntity attchEntity = new MimeEntity();string postfix = key.Substring(key.LastIndexOf('.') + 1);//判断文件后缀名适合使用那中格式发送switch (postfix.ToLower()){case "jpg":case "jpeg":attchEntity.ContentType = MediaType_enum.Image_jpeg;break;case "gif":attchEntity.ContentType = MediaType_enum.Image_gif;break;case "xml":attchEntity.ContentType = MediaType_enum.Text_xml;break;case "html":attchEntity.ContentType = MediaType_enum.Text_html;break;case "txt":attchEntity.ContentType = MediaType_enum.Text;break;default:attchEntity.ContentType = MediaType_enum.Application_octet_stream;break;}attchEntity.ContentDisposition = ContentDisposition_enum.Attachment;attchEntity.ContentTransferEncoding = ContentTransferEncoding_enum.Base64;attchEntity.ContentDisposition_FileName = key;attchEntity.DataFromStream(attchs[key]);mailEntity.ChildEntities.Add(attchEntity);continue;}}MemoryStream ms = new MemoryStream();mime.ToStream(ms);ms.Position = 0;return ms;}#endregion
}
												

.NET发送邮件和接收邮件相关推荐

  1. 使用python发送邮件和接收邮件

    发邮件是大家工作中最常用到的.今天来看一下怎么用python来发送和接收邮件. python实现发送和接收邮件功能主要用到poplib和smtplib模块. poplib用于接收邮件,而smtplib ...

  2. 用python发邮件为什么接收不了_使用python发送邮件和接收邮件

    发邮件是大家工作中最常用到的.今天来看一下怎么用python来发送和接收邮件. python实现发送和接收邮件功能主要用到poplib和smtplib模块. poplib用于接收邮件,而smtplib ...

  3. python操作邮箱发送邮件和接收邮件

    首先,用到的模块 import logging import traceback from email.mime.application import MIMEApplication import o ...

  4. C#实现发送和接收邮件的winform邮箱(保存至MySQL本地数据库)Mail Client

    C#实现发送和接受邮件的winform邮箱 一.C#邮箱总体介绍 二.C#本地邮箱如何实现 1. 登入界面 2. 发送邮件 3. 接收邮件 Imap接收邮件 接收邮件并保存到MySQL数据库之中 与前 ...

  5. 解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法

    解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法 解决的办法:邮件\通讯录\日历 一: (1)用手机网页登录QQ邮箱网页版 (2)登录后,拉到下面,设置-账户,选择这个号码的作为默认发信帐号– ...

  6. java邮件接收代码,JavaMail入门第四篇 接收邮件(示例代码)

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  7. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...

  8. python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解

    本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter cla ...

  9. cmd 发送接收邮件

    接收邮件: 1:访问 输入 " telnet pop3.sina.com 110 " 若可以访问则会出现这个消息: +OK pop3 proxy server ready 输入: ...

最新文章

  1. Google Chrome 超详细使用教程
  2. mvdr波束形成原理_5G的“波束赋形”技术是什么东东?
  3. 为什么使用GB28181而不是直接rtsp拉流
  4. 一个资源管理系统的设计--基于cgroup机制
  5. CentOS 6.5+Syslog-ng+LogZilla搭建中央日志服务器
  6. Python:hashlib加密,flask模块写接口
  7. IOS UI TabBar标签栏的使用
  8. matlab画进化树分析图,系统发育(进化)树绘制小结
  9. css设置logo图片大小,修改ecshop网站logo图片尺寸大小
  10. matlab实现简单图形的识别二
  11. 小米一直显示在android,小米三刷机失败!开机一直显示power by android
  12. 华三防火墙配置端口地址转换_华三防火墙双向nat配置 防火墙端口映射
  13. Nested weights are bad for performance警告
  14. jaccard相似度算法
  15. 【数据结构】第十三站:排序(下)归并排序
  16. Linux内核源代码下载
  17. mysql 断电_mysql的断电恢复能力
  18. Linux Alsa
  19. K均值聚类算法(Kmeans)讲解及源码实现
  20. PHPer是草根吗?

热门文章

  1. 制造业数字化转型和精益生产什么关系
  2. 【Python茴香豆系列】之 如何逆序一个列表
  3. ​互联网在影响和改变人们的生产和生活方面,有着自己的节奏
  4. YOUChain 首席架构师 何畅彬:YOUChain技术白皮书首次亮相,首席架构师深度解读
  5. 学生资质领取阿里云7个月免费服务器,飞天加速3.0-高校计划
  6. ubuntu增加新用户并增加权限
  7. 多肽修饰PNA肽核酸Bz-D-Phe-Val-Arg-pNA|L-Phe-Val-Arg-pNA
  8. DELPHI中鼠标的各种操作
  9. 东莞纺织服装学校计算机平面设计多少分,东莞市家具学校将被撤销
  10. 内网IP变更后,内网致信客户端不能正常打开WEB页面的OA