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

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

    点击下载

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/2665099.html
Copyright © 2011-2022 走看看