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[].DisplayName;
string = mime_header.From[].Address;// DecodeString(mime_header.From[0].Address);
if (!string.IsNullOrEmpty(displayname))
{
info.From = string.Format("{0}({1})", displayname, );
}
else
{
info.From = string.Format("{0}", );
}
} 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 > )
{
foreach (POP3_ClientMessage mail in c.Messages)
{
try
{
if (toDeleteMailUidList.Contains(mail.UID))
{
mail.MarkForDeletion(); dList.Add(mail.UID);
}
}
catch (Exception ex)
{
LogTextHelper.Error(ex);
}
}
}
}

原文:http://www.byywee.com/page/M0/S864/864500.html

C#- 基于Lumisoft.NET组件的POP3邮件接管和删除操纵的更多相关文章

  1. 基于Lumisoft.NET组件的POP3邮件接收和删除操作(转载)

    Lumisoft.NET组件是一个非常强大的邮件发送.邮件接收等功能的开源组件,一般用它来处理邮件的相关操作,是非常合适的.之前也写过一些该组件的随笔文章,不过主要是利用来发送邮件居多,最近由于项目需 ...

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

    From: http://www.cnblogs.com/wuhuacong/archive/2013/05/06/3063093.html Lumisoft.NET组件是一个非常强大的邮件发送.邮件 ...

  3. 基于Lumisoft.NET组件,使用IMAP协议收取邮件

    在早期一直使用Lumisoft.NET组件来进行邮件的处理查找,对于邮件的处理非常方便,之前在随笔<基于Lumisoft.NET组件的POP3邮件接收和删除操作>中也介绍过基于POP3和S ...

  4. 基于Lumisoft.NET组件的SMTP账号登陆检测

    在邮件处理的方面,Lumisoft.NET可以说是非常不错的一个选择,我在前面几篇文章中都介绍过这个组件. 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决 基于Lumisoft.NET组 ...

  5. C#邮件接收系统核心代码(接收POP3邮件IMAP邮件)

    /* * Created by SharpDevelop. * User: Administrator * Date: 2013/11/18 * Time: 20:55 * * To change t ...

  6. 使用C#和OpenPop.dll开发读取POP3邮件程序

    制作一个ASP.NET MVC4论坛项目,该项目需要将以往十多年的Mail List(邮件列表)内容都导入到新的论坛中,因此需要能够将邮件的标题.发布时间.发布人及邮件内容导入到论坛的数据库内..Ne ...

  7. Window服务基于Quartz.Net组件实现定时任务调度(二)

    前言: 在上一章中,我们通过利用控制台实现定时任务调度,已经大致了解了如何基于Quartz.Net组件实现任务,至少包括三部分:job(作业),trigger(触发器),scheduler(调度器). ...

  8. Spring - 基于注解的组件扫描

    关于Spring的书籍都会花很大篇幅来讲解Spring如何注入各种bean的问题,非常令人头疼,自己在工作中还从来没有用到过. 所以就要跳过那些篇章,直接学习基于注解的组件扫描. 发现spring2是 ...

  9. C#实现发送和接收pop3邮件方法

    必须引入Interop.jmail.dll应用 /// <summary>    /// 收取新邮件.不删除老邮件.收取邮件后写入数据库    /// </summary>   ...

随机推荐

  1. python join字符连接函数的使用方法

    就是把一个list中所有的串按照你定义的分隔符连接起来,比如: >>> import string >>> >>> >>> li ...

  2. POj 2186 Popular Cows[连通分量]

    题目大意:给出N头牛,有M种关系u, v.代表u牛崇拜v牛.要求找出有多少头牛被所有牛崇拜着题目链接:http://poj.org/problem?id=2186解题思路:1>求出强连通分量,标 ...

  3. Unity3D连接真机调试教程,可抓断点

    源地址:http://www.unity蛮牛.com/thread-19586-1-1.html <ignore_js_op> 未标题-1.jpg (52.33 KB, 下载次数: 0) ...

  4. Universal Asynchronous Receiver/Transmitter

    USART簡介與特性 NRZ標準資料格式(Mark/Space) 半雙工/全雙工 Synchronous 同步傳輸 CLOCK SKEW Asynchronous 非同步傳輸 半/全雙工.同步/非同步 ...

  5. 使用Timer执行定时任务

    一.Timer概述 在Java开发中,会碰到一些需要定时或者延时执行某些任务的需求,这时,我们可以使用Java中的Timer类实现. 二.Timer介绍 Timer是一个定时器类,通过该类可以为指定的 ...

  6. hadoop2.2编程: SequenceFileWritDemo

    import java.io.IOException; import java.net.URI; import org.apache.hadoop.fs.FileSystem; import org. ...

  7. 逻辑运算符&& 用法解释

    A&&B 首先判断A,A成功然后判断B:A不成功则结束判断,返回false;

  8. cat ,more, Less区别

    使用cat more less都可以查看文本内容,但是它们三者有什么区别呢?more和less的功能完全重复吗?以下是我个人的总结,欢迎大家一起来分享 cat        连续显示.查看文件内容mo ...

  9. Cookie的前后台应用

    1.jquery.cookie.js的基本应用 这个是第三方js插件,可以更方便的设置和使用cookie $.cookie("UserName", "kingtiger& ...

  10. c#浅谈反射内存的处理

    这段时间由于公司的项目的要求,我利用c#的反射的机制做了一个客户端框架.客户端里的所有的模块都是以一定形式进行提供,例如:FORM,UserControl. 在做的过程中很简单与愉快.具体的过程如下: ...