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

 

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

 

点击下载

转载于:https://www.cnblogs.com/jiangbiao/archive/2012/08/29/2662437.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abs std::abs_ABS的完整形式是什么?

abs std::absABS&#xff1a;防抱死制动系统 (ABS: Anti-lock Braking System) ABS is an abbreviation of the Anti-lock Braking System. It is a safety anti-skid braking system that is used on a variety of aircraft, automobiles and other land vehicles, such as mo…

ubuntu 使用

shell 命令历史搜索 &#xff1a; ctrl r使能 session 选择界面&#xff1a;安装gnome-session-fallback安装lwqq转载于:https://www.cnblogs.com/JonnyLulu/p/3600263.html

汉字速查使用方法简介

《汉字速查》&#xff08;HanziSearcher&#xff09;是一个支持全汉字字典和词典的检索工具。其界面如下所示。 界面上方为工具栏。 左方为字典和词典检索栏。 右方在启动时显示版权信息和作者的联系方式&#xff0c;在执行检索时&#xff0c;显示检索结果。 检索方法 汉字速查…

android jni示例_Android服务示例

android jni示例A service is a component that runs in the background for supporting different types of operations that are long running. The user is not interacted with these. These perform task even if application is destroyed. Examples include handling of…

《MySQL——选错索引,该如何做》

如果不断地删除历史数据和新增数据&#xff0c;MySQL有时会选错索引。 选择索引是优化器的工作&#xff0c;优化器优化时会考虑的因素&#xff1a;扫描行数、是否需要排序、是否使用临时表 MySQL通过统计索引上的基数&#xff0c;作为索引的区分度。 统计方法时采样统计&#x…

LPWSTR 类型的实参与const.char *类型形参不兼容

CString csPlus; CString csSummand; m_PlusNumber.GetWindowTextW(csPlus); m_Summand.GetWindowTextW(csSummand); int nPlus atoi(csPlus.GetBuffer(0)); //将编辑框文本转换成整数// int nPlus atoi(strcpy(csPlus.GetBuffer(10),"aa")); csPlus.ReleaseBu…

空间换时间,把递归的时间复杂度降低到O(2n)

递归算法的时间复杂度除非只有前两项&#xff0c;否则都不是线性的&#xff0c;并且相当耗费内存。我们用最常见的的fibonacci数列来说明&#xff1a; function fibonacci(n){if( n 0 || n 1){return n;} else {return fibonacci(n - 1) fibonacci(n - 2);} } 这是一种最常见…

scala char_Scala中的Char数据类型

scala charScala Char数据类型 (Scala Char Data Type) Character (char) in Scala is a data type that is equivalent to 16-bit unsigned integer. The character data type stores a single character. It can be an alphabet, numbers, symbols, etc. The character takes…

《MySQL——给长字符串加索引》

对于长字符串&#xff0c;可用如下方式建立索引&#xff1a; &#xff08;1&#xff09;前缀索引 &#xff08;2&#xff09;字符串倒叙前缀索引 &#xff08;3&#xff09;添加hash字段并在hash字段上加索引 &#xff08;4&#xff09;字段拆分&#xff08;一个字段可拆分为两…

[蓝桥杯历届试题] 欧拉与鸡蛋

大数学家欧拉在集市上遇到了本村的两个农妇&#xff0c;每人跨着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。 欧拉随便问&#xff1a;“卖了多少鸡蛋呢&#xff1f;” 不料一个说&#xff1a;“我们两人自己卖自己的&#xff0c;一共卖了150个鸡蛋&#xff0c;虽然…

Python元组练习

Here, we are covering following Python tuple exercises, 在这里&#xff0c;我们将介绍以下Python元组练习 &#xff0c; Creating & printing a tuple 创建和打印元组 Unpacking the tuple into strings 将元组解包成字符串 Create a tuple containing the letters of…

傻瓜教你看清MVC内部执行流程之ViewData数据传输,轻松学MVC--①目了然篇(待续)

1.首先在执行到Controller里面的action(方法)时,执行到最后会调用一个View()-->此方法是Controller的一个方法 源代码: View Code protected internal ViewResult View(){return View(null /* viewName */, null /* masterName */, null /* model */);} 2.然后继续调用自己…

《MySQL——count()逻辑》

count()用法 count()语义&#xff1a;该函数为一个聚合函数&#xff0c;对于返回的结果集一行行地判断&#xff0c;如果count函数地参数不是NULL&#xff0c;累计值就加1&#xff0c;否则不加。最后返回累计值。 所以count(*),count(主键id)和count(1)都表示返回满足条件地结果…

phpmailer 发送邮件

<?php /* 可用新浪和网易邮箱测试成功&#xff0c;但QQ不成功&#xff01; 下载 phpmailer 解压 http://phpmailer.worxware.com/要注意邮件服务器的端口号&#xff0c;默认是 25 不用修改&#xff0c;如果不是则要修改如下&#xff0c;在$mail->IsSMTP() ;下一行加上 $…

静态负载均衡和动态负载均衡_动态负载平衡

静态负载均衡和动态负载均衡动态负载平衡 (Dynamic Load Balancing) The algorithm monitors changes on the system workload and redistributes the work accordingly. 该算法监视系统工作负载的变化并相应地重新分配工作。 This algorithm works on three strategies: 该算…

poj 1088

题目&#xff1a;http://poj.org/problem?id1088 记忆化搜索&#xff0c;dp[r][c] max(dp[r - 1][c] , dp[r 1][c] , dp[r][c - 1] , dp[r][c 1]) 1 ( if (题目给的条件满足&#xff09;&#xff09; View Code 1 using namespace std;2 typedef long long ll;3 const in…

《MySQL——order by逻辑(全字段排序与rowid排序)》

创建一个表&#xff0c;然后使用查询语句&#xff1a; 查询城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前 1000 个人的姓名、年龄 create table t (id int(11) not null,city vachar(16) not null,name vachar(16) not null,age vachar(16) not null,addr va…

ruby 生成哈希值_哈希== Ruby中的运算符

ruby 生成哈希值In the last article, we have seen how we can compare two hash objects with the help of < operator? "<" method is a public instance method defined in Rubys library. 在上一篇文章中&#xff0c;我们看到了如何在<运算符的帮助下…

HTML5 video

摘要&#xff1a;本文主要介绍HTML5 video在android2.2中实现的主要架构和程序流程。 一、实现HTML5 video主要的类 1&#xff0e; 主要类结构及介绍 图1中绿色类为java类&#xff0c;其余为c类&#xff0c;下面是各个类的具体介绍: (1) HTMLElement类不是最上层类&#xff0c…

《MySQL——使用联合索引、覆盖索引,避免临时表的排序操作》

联合索引避免临时表排序 在上一篇笔记(MySQL——order by逻辑&#xff08;全字段排序与rowid排序&#xff09;)中&#xff0c;讲到查询语句查询多个字段的时候使用order by语句实现返回值是有序的&#xff0c;而order by是使用到了临时表的&#xff0c;会带来时间和空间损失。…