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自帶就有發件的類庫,如果有下章,就會提下作者是怎么發送郵件的,包括選擇發送人,附件等一系列操作。

 

好吧,大家期待的源碼,這里可以提供下載的。

 

點擊下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM