主頁(yè) > 知識(shí)庫(kù) > 深入Lumisoft.NET組件POP3郵件接收與刪除操作的使用詳解

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

熱門標(biāo)簽:電銷語(yǔ)音自動(dòng)機(jī)器人 戶外地圖標(biāo)注軟件手機(jī)哪個(gè)好用 地圖標(biāo)注和認(rèn)領(lǐng) 五常地圖標(biāo)注 鄭州400電話辦理 聯(lián)通 智能電話營(yíng)銷外呼系統(tǒng) 長(zhǎng)春呼叫中心外呼系統(tǒng)哪家好 凱立德導(dǎo)航官網(wǎng)地圖標(biāo)注 萊蕪?fù)夂綦婁N機(jī)器人價(jià)格

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

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

首先使用POP3,必須創(chuàng)建一個(gè)POP3_Client的對(duì)象,然后通過(guò)Connect和Login進(jìn)行連接和登錄處理,相關(guān)的代碼如下所示。

復(fù)制代碼 代碼如下:

using (POP3_Client popClient = new POP3_Client())
            {
                popClient.Logger = new Logger();
                popClient.Logger.WriteLog += new EventHandlerWriteLogEventArgs>(WriteLog);

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


POP3的的郵件下載通過(guò)POP3_Client 對(duì)象的屬性Messages對(duì)象進(jìn)行,每個(gè)POP3_ClientMessage代表一份完整的郵件信息,一開(kāi)始應(yīng)該是只是獲取一些簡(jiǎn)單的郵件信息(其中包括郵件的唯一標(biāo)識(shí)UID),這樣才能提高POP3協(xié)議的處理速度,如下代碼所示。
復(fù)制代碼 代碼如下:

foreach (POP3_ClientMessage message in popClient.Messages)

為了進(jìn)一步獲取郵件頭部信息,那么需要進(jìn)行下面的轉(zhuǎn)換
復(fù)制代碼 代碼如下:

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

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

這些郵件地址的信息,都是通過(guò)Mail_t_Mailbox對(duì)象來(lái)記錄,一般包含郵件地址的Address和顯示名稱DisplayName,這樣非常方便用來(lái)顯示,如我們可以進(jìn)行轉(zhuǎn)義,記錄到數(shù)據(jù)庫(kù)里面。

復(fù)制代碼 代碼如下:

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);
                            }
                        }

復(fù)制代碼 代碼如下:

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會(huì)有一個(gè)在Pop3服務(wù)器范圍內(nèi)唯一的Id,檢查這個(gè)Id是否存在就可以知道以前有沒(méi)有接收過(guò)這封郵件
復(fù)制代碼 代碼如下:

info.MailUid = message.UID;

每份郵件的頭部信息,都會(huì)包含一個(gè)日期的,如下可以獲取到該日期
復(fù)制代碼 代碼如下:

info.Date = mime_header.Date;

標(biāo)題信息可以通過(guò)下面代碼獲取
復(fù)制代碼 代碼如下:

info.Title = mime_header.Subject;/

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

如果需要進(jìn)一步獲取郵件的正文內(nèi)容,則需要對(duì)信息進(jìn)行進(jìn)一步的轉(zhuǎn)換,把message對(duì)象進(jìn)行MessageToByte操作,然后利用函數(shù)Mail_Message.ParseFromByte進(jìn)行轉(zhuǎn)換。
復(fù)制代碼 代碼如下:

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
{
     //屏蔽編碼出現(xiàn)錯(cuò)誤的問(wèn)題,錯(cuò)誤在BodyText存在而B(niǎo)odyHtmlText不存在的時(shí)候,訪問(wèn)BodyHtmlText會(huì)出現(xiàn)
}


郵件的附件是通過(guò)MIME_Entity來(lái)承載信息的,所以我們需要把對(duì)象通過(guò)mime_message.GetAttachments(true, true)進(jìn)行獲取,轉(zhuǎn)換為附件信息。
復(fù)制代碼 代碼如下:

#region 郵件附件內(nèi)容
                        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;

如果需要進(jìn)一步獲取附件里面的文件字節(jié)流,那么還需要進(jìn)行進(jìn)一步的轉(zhuǎn)換為MIME_b_SinglepartBase對(duì)象。
復(fù)制代碼 代碼如下:

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

如果要區(qū)分郵件里面的附件是內(nèi)嵌圖片附件還是真正的附件,那么可以通過(guò)下面代碼進(jìn)行判斷,如果是MIME_DispositionTypes.Attachment的就是普通附件,MIME_DispositionTypes.Inline的就是內(nèi)嵌正文的附件。
復(fù)制代碼 代碼如下:

entity.ContentDisposition.DispositionType == MIME_DispositionTypes.Attachment

3、郵件的刪除操作
 
服務(wù)器上的郵件,可以通過(guò)POP3的協(xié)議方式進(jìn)行刪除,刪除操作很簡(jiǎn)單,主要是通過(guò)mail.MarkForDeletion進(jìn)行標(biāo)識(shí)即可,實(shí)例操作代碼如下所示
復(fù)制代碼 代碼如下:

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);
                        }
                    }
                }
            }

您可能感興趣的文章:
  • java使用Socket實(shí)現(xiàn)SMTP協(xié)議發(fā)送郵件
  • Java+Nginx實(shí)現(xiàn)POP、IMAP、SMTP郵箱代理服務(wù)
  • java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法
  • 提示Outlook/Foxmail收取163郵件失?。篍RR 您沒(méi)有權(quán)限使用pop3功能
  • 如何用POP3接收電子郵件?
  • 手工體驗(yàn)smtp和pop3協(xié)議 郵件實(shí)現(xiàn)詳解(二)

標(biāo)簽:衢州 西藏 福州 西寧 宣城 紅河 湖州 岳陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《深入Lumisoft.NET組件POP3郵件接收與刪除操作的使用詳解》,本文關(guān)鍵詞  深入,Lumisoft.NET,組件,POP3,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入Lumisoft.NET組件POP3郵件接收與刪除操作的使用詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于深入Lumisoft.NET組件POP3郵件接收與刪除操作的使用詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章