激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 深入Lumisoft.NET組件POP3郵件接收與刪除操作的使用詳解

深入Lumisoft.NET組件POP3郵件接收與刪除操作的使用詳解

2019-11-06 10:37asp.net教程網 ASP.NET教程

本篇文章對Lumisoft.NET組件POP3郵件接收與刪除操作的使用進行了詳細的介紹。需要的朋友參考下

Lumisoft.NET組件是一個非常強大的郵件發送、郵件接收等功能的開源組件,一般用它來處理郵件的相關操作,是非常合適的。之前也寫過一些該組件的隨筆文章,不過主要是利用來發送郵件居多,最近由于項目需要,需要利用該組件來接收郵件,郵件通過POP3協議進行接收到本地,故對該組件進行了全面的了解和使用。本文主要是在此背景上,介紹該組件的POP3協議處理類的使用。Lumisoft.NET組件2013年作者有做了一定的更新,修復了一些問題,本文是基于該組件的最新版本進行開發使用。

1、POP3登錄及頭部信息獲取

首先使用POP3,必須創建一個POP3_Client的對象,然后通過Connect和Login進行連接和登錄處理,相關的代碼如下所示。

復制代碼代碼如下:


using (POP3_Client popClient = new POP3_Client())
            {
                popClient.Logger = new Logger();
                popClient.Logger.WriteLog += new EventHandler<WriteLogEventArgs>(WriteLog);

 

                popClient.Connect(pop3Server, pop3Port, pop3UseSsl);
                popClient.Login(username, password);


POP3的的郵件下載通過POP3_Client 對象的屬性Messages對象進行,每個POP3_ClientMessage代表一份完整的郵件信息,一開始應該是只是獲取一些簡單的郵件信息(其中包括郵件的唯一標識UID),這樣才能提高POP3協議的處理速度,如下代碼所示。

復制代碼代碼如下:

foreach (POP3_ClientMessage message in popClient.Messages)


為了進一步獲取郵件頭部信息,那么需要進行下面的轉換

復制代碼代碼如下:

Mail_Message mime_header = Mail_Message.ParseFromByte(message.HeaderToByte());


轉換后Mail_Message承載了郵件頭部文件的很多必備信息,如發送人,發送人名稱,接收地址,抄送人地址,郵件標題,郵件日期等等信息。

 

這些郵件地址的信息,都是通過Mail_t_Mailbox對象來記錄,一般包含郵件地址的Address和顯示名稱DisplayName,這樣非常方便用來顯示,如我們可以進行轉義,記錄到數據庫里面。

復制代碼代碼如下:

if (mime_header.From != null)
                        {
                            //(wuhuacong@163.com)
                            string displayname = mime_header.From[0].DisplayName;
                            string from = mime_header.From[0].Address;// DecodeString(mime_header.From[0].Address);
                            if (!string.IsNullOrEmpty(displayname))
                            {
                                info.From = string.Format("{0}({1})", displayname, from);
                            }
                            else
                            {
                                info.From = string.Format("{0}", from);
                            }
                        }

 

復制代碼代碼如下:


if (mime_header.To != null)
                        {
                            StringBuilder sb = new StringBuilder();
                            foreach (Mail_t_Mailbox recipient in mime_header.To.Mailboxes)
                            {
                                string displayname = recipient.DisplayName;
                                string address = recipient.Address;
                                if (!string.IsNullOrEmpty(displayname))
                                {
                                    sb.AppendFormat("{0}({1});", displayname, address);
                                }
                                else
                                {
                                    sb.AppendFormat("{0};", address);
                                }
                            }
                            info.Senders = sb.ToString().Trim(';');
                        }

 

                        if (mime_header.Cc != null)
                        {
                            StringBuilder sb = new StringBuilder();
                            foreach (Mail_t_Mailbox recipient in mime_header.Cc.Mailboxes)
                            {
                                string displayname = recipient.DisplayName;
                                string address = recipient.Address;
                                if (!string.IsNullOrEmpty(displayname))
                                {
                                    sb.AppendFormat("{0}({1});", displayname, address);
                                }
                                else
                                {
                                    sb.AppendFormat("{0};", address);
                                }
                            }
                            info.Carboncopy = sb.ToString().Trim(';');
                        }


每封Email會有一個在Pop3服務器范圍內唯一的Id,檢查這個Id是否存在就可以知道以前有沒有接收過這封郵件

復制代碼代碼如下:

info.MailUid = message.UID;


每份郵件的頭部信息,都會包含一個日期的,如下可以獲取到該日期

復制代碼代碼如下:

info.Date = mime_header.Date;


標題信息可以通過下面代碼獲取

復制代碼代碼如下:

info.Title = mime_header.Subject;/


2、郵件正文信息和附件信息的獲取

如果需要進一步獲取郵件的正文內容,則需要對信息進行進一步的轉換,把message對象進行MessageToByte操作,然后利用函數Mail_Message.ParseFromByte進行轉換。

復制代碼代碼如下:


byte[] messageBytes = message.MessageToByte();

 

Mail_Message mime_message = Mail_Message.ParseFromByte(messageBytes);
if (mime_message == null) continue;
info.Body = mime_message.BodyText;
try
{
     if (!string.IsNullOrEmpty(mime_message.BodyHtmlText))
     {
            info.Body = mime_message.BodyHtmlText;
     }
 }
catch
{
     //屏蔽編碼出現錯誤的問題,錯誤在BodyText存在而BodyHtmlText不存在的時候,訪問BodyHtmlText會出現
}


郵件的附件是通過MIME_Entity來承載信息的,所以我們需要把對象通過mime_message.GetAttachments(true, true)進行獲取,轉換為附件信息。

復制代碼代碼如下:

#region 郵件附件內容
                        foreach (MIME_Entity entity in mime_message.GetAttachments(true, true))
                        {
                            if (entity.ContentDisposition != null &&
                                entity.ContentDisposition.Param_FileName != null)
                            {
                                //Console.WriteLine("Attachment: " + entity.ContentDisposition.Param_FileName);
                                string fileName = entity.ContentDisposition.Param_FileName;


如果需要進一步獲取附件里面的文件字節流,那么還需要進行進一步的轉換為MIME_b_SinglepartBase對象。

復制代碼代碼如下:

MIME_b_SinglepartBase byteObj = (MIME_b_SinglepartBase)entity.Body;
 if (byteObj != null)
 {
         FileUtil.CreateFile(filePath, byteObj.Data);
         fileSize = byteObj.Data.Length;


如果要區分郵件里面的附件是內嵌圖片附件還是真正的附件,那么可以通過下面代碼進行判斷,如果是MIME_DispositionTypes.Attachment的就是普通附件,MIME_DispositionTypes.Inline的就是內嵌正文的附件。

復制代碼代碼如下:

entity.ContentDisposition.DispositionType == MIME_DispositionTypes.Attachment


3、郵件的刪除操作
 
服務器上的郵件,可以通過POP3的協議方式進行刪除,刪除操作很簡單,主要是通過mail.MarkForDeletion進行標識即可,實例操作代碼如下所示

復制代碼代碼如下:


using (POP3_Client c = new POP3_Client())
            {
                c.Connect(pop3Server, pop3Port, pop3UseSsl);
                c.Login(username, password);

 

                if (c.Messages.Count > 0)
                {
                    foreach (POP3_ClientMessage mail in c.Messages)
                    {
                        try
                        {
                            if (toDeleteMailUidList.Contains(mail.UID))
                            {
                                mail.MarkForDeletion();

                                deletedList.Add(mail.UID);
                            }
                        }
                        catch (Exception ex)
                        {
                            LogTextHelper.Error(ex);
                        }
                    }
                }
            }

 

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片视频网站在线观看 | 美女视频黄a视频免费全过程 | 国产一国产一级毛片视频在线 | 亚洲福利在线观看视频 | 亚洲自拍第二页 | a级欧美| 免费观看在线 | 黄网站色成年大片免费高 | 久久国产精品影视 | 欧美日韩一区,二区,三区,久久精品 | 欧美一级做一级爱a做片性 91在线视频观看 | 免费在线观看成年人视频 | 色婷婷久久久 | 欧美成人精品一区二区 | 色网免费观看 | 国产女厕一区二区三区在线视 | 久久精品成人影院 | 在线免费小视频 | 国产一级小视频 | 日本羞羞影院 | 成人免费在线播放 | 91av在线免费观看 | 中韩毛片 | 性 毛片| 久草手机在线 | 可以看逼的视频 | 成品片a免费直接观看 | 成人午夜免费在线视频 | 49vv看片免费 | 一本色道久久久888 香蕉视频99 | 双性帝王调教跪撅打屁股 | 爱视频福利| 国产在线精品一区二区三区 | 久久精品一二三区白丝高潮 | 国产一区网址 | 91久久另类重口变态 | 在线看91| 色网站综合 | 视频一区二区三区在线播放 | 99精品视频在线观看免费 | 黄色网址免费在线 |