设为首页 收藏本站
查看: 1190|回复: 0

[经验分享] Web版OutLook,利用POP接收邮件服务器邮件

[复制链接]

尚未签到

发表于 2015-9-13 10:49:09 | 显示全部楼层 |阅读模式
  一直想做一个Web版的OutLook,所以才萌生这个想法,其实以前也接触过这方面的东西。于是上网找了找,漫天的都是Jmail来接收,好吧,既然大家都在用我也就下载下来试试了。
  什么,怎么总是报错呢?原来才发现要找破解版的,又XXX找到了一个Jmail4.4的破解版,终于要进入正题了,看着蛮简单的,照着文档敲了代码上去,断点运行一看。哟!还真可以了,逐步断点继续跟踪,我X,怎么标题什么的都是乱码。后面找到POP协议看了下,然后是因为编码问题。
  
好吧既然是编码就能解码吧,从JMail中获取邮件源码后,过来解码…………………………一个痛苦而又漫长的过程,最终还是失败了,其中原因就不细说了,反正最终出来的效果还是有点问题,内容还是会乱码,附件会是空的,内嵌的图片显示不了等各种问题。
  
  好吧,哥执着着想找找别的方法,于是终于发现了一个“神器”【Aspose.Network】,这个是要收费的,找了好久才找了一个可以使用的版本过来,这个组件集成了蛮多功能的,貌似现在的新版本已经把邮件这个单独剥离出来了,但是新版的貌似还是会有乱码问题,于是还是使用这个吧。
  注:此文只做练习只用,请不要用于商业用途。
  
  其实无非就是需要拿到邮件服务器上的邮件标题、内容、附件、发件人什么的,这个组件中都已经提供了,使用非常方便。
  好吧,下面开始讲解下具体怎么弄吧!

1、建立连接



1             //建立连接  Pop3Client(邮件POP,端口,用户名,密码)
2             Pop3Client Pop3 = new Pop3Client(Request.Form["pop"], 110, Request.Form["user"], Request.Form["pass"]);
3             Pop3.Connect(true);//连接并且登录
2、获取所有邮件开始遍历并且获取详细信息




DSC0000.gif
1             int MessageCount = Pop3.GetMessageCount();//获取目标邮箱所有邮件数量
2
3             //循环获取单个邮件信息
4             for (int i = 1; i <= MessageCount; i++)
5             {
6                 Mail ModelMail = new Mail();//单条邮件实体
7                 //获取单条邮件
8                 MailMessage MailMsg = Pop3.FetchMessage(i);
9                 string MessageID = Pop3.GetMessageUniqueId(i);//邮件唯一ID
10                 ModelMail.Date = MailMsg.Date;//发送时间
11                 ModelMail.Subject = MailMsg.Subject;//主题
12                 ModelMail.Body = MailMsg.HtmlBody;//内容
13                 for (int j = 0; j < MailMsg.To.Count; j++)//收件人
14                 {
15                     ModelMail.To += MailMsg.To[j].Address + ";";
16                     ModelMail.ToName += MailMsg.To[j].DisplayName + "&lt;" + MailMsg.To[j].Address + ">";
17                 }
18                 for (int j = 0; j < MailMsg.CC.Count; j++)//抄送
19                 {
20                     ModelMail.CC += MailMsg.CC[j].Address + ";";
21                     ModelMail.CCName += MailMsg.CC[j].DisplayName + "&lt;" + MailMsg.CC[j].Address + ">";
22                 }
23                 for (int j = 0; j < MailMsg.From.Count; j++)//发送人  
24                 {
25                     ModelMail.From += MailMsg.From[j].Address + ";";
26                     ModelMail.FromName += MailMsg.From[j].DisplayName + "&lt;" + MailMsg.From[j].Address + ">";
27                 }
28                 AttachmentCollection Att = MailMsg.Attachments;//获取附件
29                 string path = string.Empty;
30                 foreach (var list in Att)
31                 {
32                     path = Server.MapPath("/Att/" + MessageID + "/");
33                     if (!System.IO.Directory.Exists(path))
34                     {
35                         Directory.CreateDirectory(path);
36                     }
37                     list.Save(path + list.Name);
38                     ModelMail.Att += list.Name + ";";
39                 }
40                 LinkedResourceCollection MailLink = MailMsg.LinkedResources;//内嵌附件
41                 foreach (var list in MailLink)
42                 {
43                     if (string.IsNullOrEmpty(list.Name))
44                         continue;
45                     string ContentId = list.ContentId;
46                     path = Server.MapPath("/Att/" + MessageID + "/");
47                     if (!System.IO.Directory.Exists(path))
48                     {
49                         Directory.CreateDirectory(path);
50                     }
51                     list.Save(path + list.Name);
52                     ModelMail.Body = ModelMail.Body.Replace("cid:" + ContentId, "/Att/" + MessageID + "/" + list.Name);//替换内容中的内嵌附件
53                 }
54                 ListMail.Add(ModelMail);
55                 //删除服务器上的原始邮件
56                 //Pop3.DeleteMessage(i);
57             }
58             //断开链接
59             Pop3.Disconnect();

  其实就只有这么多代码,就可以实现所有功能了,邮件拿过来后就可以把邮件服务器上的邮件删掉了(OutLook等都是这么操作),然后可以存储到你本地的数据库中,进行一系列操作就可以差不多跟OutLook一样了(省略N个字),这篇就介绍下收邮件吧,发邮件就简单了,.NET自带就有发件的类库,如果有下章,就会提下作者是怎么发送邮件的,包括选择发送人,附件等一系列操作。
  
  好吧,大家期待的源码,这里可以提供下载的。
  
  点击下载

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-112961-1-1.html 上篇帖子: [Outlook] Outlook2013能收但无法发送邮件-0x800CCC13, 0x800CCC0B, 0x8004210B 下篇帖子: 再asp.net中实现sharepoint里面调用outlook address book的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表