基于Lumisoft.NET组件的POP3邮件接收和删除操作

    文章来源:中国互联 更新时间:2013-8-2 14:12:38
分享:

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(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.AppendF;" title='学习asp.net之SQL语句查询效率和安全性'>学习asp.net之SQL语句查询效率和安全性

  • ASP.NET生成静态HTML页面并分别按年月目录存放
  • 整站如何防止SQL攻击
  • .NET中查看一个强命名程序集(*****.dll)的Pub...
  • .net 页面指定区域打印的方法
  • 在线咨询
    • 在线时间
    • 8:00-21:00
    gin(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);

    }

    }

    }

    }

    相关文章:

    在线咨询