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.pswp.cn/news/377246.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377246.shtml
英文地址,請注明出處:http://en.pswp.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;會帶來時間和空間損失。…