zoukankan      html  css  js  c++  java
  • Web版OutLook,利用POP接收邮件服务器邮件

    一直想做一个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、获取所有邮件开始遍历并且获取详细信息

     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自带就有发件的类库,如果有下章,就会提下作者是怎么发送邮件的,包括选择发送人,附件等一系列操作。

    好吧,大家期待的源码,这里可以提供下载的。

    点击下载

    作者:LyIng.Net
    出处:http://www.cnblogs.com/jiangbiao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    FastDFS--storage文件上传和下载问题
    Ubuntu18.04中安装virtualenv和virtualenvwrapper
    详解文件包含漏洞
    pikachu-数字型注入-sqlmap
    sqlmap命令手册
    SQL注入详解及技巧
    Linux中更新firefox
    DVWA-SQL注入
    CTF杂项题解题思路
    ubuntu搭建环境
  • 原文地址:https://www.cnblogs.com/jiangbiao/p/2662437.html
Copyright © 2011-2022 走看看