最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年05月07日 09:36:07   作者:  
本篇文章對Lumisoft.NET組件POP3郵件接收與刪除操作的使用進行了詳細的介紹。需要的朋友參考下

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

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

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

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

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代表一份完整的郵件信息,一開始應(yīng)該是只是獲取一些簡單的郵件信息(其中包括郵件的唯一標識UID),這樣才能提高POP3協(xié)議的處理速度,如下代碼所示。
復(fù)制代碼 代碼如下:

foreach (POP3_ClientMessage message in popClient.Messages)

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

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

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

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

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

info.MailUid = message.UID;

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

info.Date = mime_header.Date;

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

info.Title = mime_header.Subject;/

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

如果需要進一步獲取郵件的正文內(nèi)容,則需要對信息進行進一步的轉(zhuǎn)換,把message對象進行MessageToByte操作,然后利用函數(shù)Mail_Message.ParseFromByte進行轉(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)錯誤的問題,錯誤在BodyText存在而BodyHtmlText不存在的時候,訪問BodyHtmlText會出現(xiàn)
}


郵件的附件是通過MIME_Entity來承載信息的,所以我們需要把對象通過mime_message.GetAttachments(true, true)進行獲取,轉(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;

如果需要進一步獲取附件里面的文件字節(jié)流,那么還需要進行進一步的轉(zhuǎn)換為MIME_b_SinglepartBase對象。
復(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)嵌圖片附件還是真正的附件,那么可以通過下面代碼進行判斷,如果是MIME_DispositionTypes.Attachment的就是普通附件,MIME_DispositionTypes.Inline的就是內(nèi)嵌正文的附件。
復(fù)制代碼 代碼如下:

entity.ContentDisposition.DispositionType == MIME_DispositionTypes.Attachment

3、郵件的刪除操作
 
服務(wù)器上的郵件,可以通過POP3的協(xié)議方式進行刪除,刪除操作很簡單,主要是通過mail.MarkForDeletion進行標識即可,實例操作代碼如下所示
復(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);
                        }
                    }
                }
            }

相關(guān)文章

  • .NET對接極光消息推送的實現(xiàn)方法

    .NET對接極光消息推送的實現(xiàn)方法

    很多手機APP會不定時的給用戶推送消息,本文主要介紹了.NET對接極光消息推送,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • .NET Core基于Generic Host實現(xiàn)后臺任務(wù)方法教程

    .NET Core基于Generic Host實現(xiàn)后臺任務(wù)方法教程

    這篇文章主要給大家介紹了關(guān)于.NET Core基于Generic Host實現(xiàn)后臺任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 詳解ASP.NET Core 之 Identity 入門(二)

    詳解ASP.NET Core 之 Identity 入門(二)

    本篇文章主要介紹了ASP.NET Core 之 Identity 入門,主要負責(zé)對用戶的身份進行認證,有興趣的可以了解一下。
    2016-12-12
  • Asp.Net Core輕量級Aop解決方案:AspectCore

    Asp.Net Core輕量級Aop解決方案:AspectCore

    這篇文章主要介紹了Asp.Net Core輕量級Aop解決方案:AspectCore,需要的朋友可以參考下
    2017-06-06
  • asp.net(C#) 開源資源大匯總

    asp.net(C#) 開源資源大匯總

    asp.net(C#) 開源資源大匯總,想要學(xué)習(xí)c#的朋友可以參考下
    2012-05-05
  • ASP.NET Core跨站登錄重定向的實現(xiàn)新姿勢

    ASP.NET Core跨站登錄重定向的實現(xiàn)新姿勢

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core實現(xiàn)跨站登錄重定向的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • ASP.NET 通過攔截器記錄錯誤日志的示例代碼

    ASP.NET 通過攔截器記錄錯誤日志的示例代碼

    這篇文章主要介紹了ASP.NET 通過攔截器記錄錯誤日志的示例代碼,幫助大家更好的理解和學(xué)習(xí)使用.NET技術(shù),感興趣的朋友可以了解下
    2021-04-04
  • asp.net Ext grid 顯示列表

    asp.net Ext grid 顯示列表

    asp.net Ext grid 顯示列表實現(xiàn)代碼。
    2009-08-08
  • IIS處理Asp.net請求和Asp.net頁面生命周期詳細說明

    IIS處理Asp.net請求和Asp.net頁面生命周期詳細說明

    ASP.NET 頁運行時,此頁將經(jīng)歷一個生命周期,在生命周期中將執(zhí)行一系列處理步驟。這些步驟包括初始化、實例化控件、還原和維護狀態(tài)、運行事件處理程序代碼以及進行呈現(xiàn)
    2012-01-01
  • ynamic LINQ創(chuàng)建高級查詢服務(wù)

    ynamic LINQ創(chuàng)建高級查詢服務(wù)

    這篇文章主要介紹了ynamic LINQ創(chuàng)建高級查詢服務(wù),如何使用Dynamic LINQ輕松實現(xiàn)更強大的高級查詢服務(wù),下面文章內(nèi)容具有一的的參考價值,需要的小伙伴可以參考一下
    2022-03-03

最新評論

洱源县| 双流县| 凤山市| 郎溪县| 盐源县| 昌平区| 永德县| 双峰县| 察雅县| 沧州市| 南平市| 马龙县| 青河县| 峨眉山市| 中卫市| 水城县| 株洲县| 陇南市| 霍城县| 克东县| 兰溪市| 巴楚县| 涪陵区| 巩义市| 新乡市| 澜沧| 堆龙德庆县| 崇州市| 长宁县| 通化市| 阿克陶县| 增城市| 沂南县| 阜平县| 阜平县| 荔波县| 汉寿县| 南部县| 游戏| 汶川县| 句容市|