deerchao的blog

Be and aware of who you are.

使用 LumiSoft.Net.POP3.Client 接收邮件

.Net FCL 里自带了SMTP的实现System.Net.Mail,但是没有POP3的实现,要想使用.Net通过代码接收邮件,就只能通过第三方的组件了。这里我给大家介绍一下我常用的LumiSoft.Net.POP3.Client。

LumiSoft.Net是由Ivar Lumi开发的免费,开放源码的.Net网络协议库,包含了DNS Client, FTP Client/Server, ICMP, IMAP Client/Server, MIME, NNTP, POP3 Client/Server, SMTP Client/Server等协议/规范的实现。你可以在这里下载所有的源码/二进制文件/文档,也可以在LumiSoft.Net Forum里获取支持。

我们要做的首先当然是下载LumiSoft.Net类库,并下载LumiSoft.Net文档,然后在自己的项目里引用LumiSoft.Net了.

接收邮件的代码如下,需要说明的是邮件的内容是经过MIME格式的,所以需要使用Mime.Parse()进行处理。
using System;
using LumiSoft.Net.POP3.Client;
using LumiSoft.Net.Mime;

    
public List<Mime> GetEmails()
    {
        
//需要首先设置这些信息
        string pop3Server;
        
int pop3Port;
        
bool pop3UseSsl;
        
string username, password;
        List
<string> gotEmailIds;
        
        List
<Mime> result=new List<Mime>();
        
using(POP3_Client pop3 = new POP3_Client())
        {
            
//与Pop3服务器建立连接
            pop3.Connect(pop3Server, pop3Port, pop3UseSsl);
            
//验证身份
            pop3.Authenticate(username, password, false);
            
            
//获取邮件信息列表
            POP3_MessagesInfo infos = pop3.GetMessagesInfo();
            
            
foreach (POP3_MessageInfo info in infos)
            {
                
//每封Email会有一个在Pop3服务器范围内唯一的Id,检查这个Id是否存在就可以知道以前有没有接收过这封邮件
                if(gotEmailIds.Contains(info.MessageUID))
                    
continue;

                
//获取这封邮件的内容
                byte[] bytes = pop3.GetMessage(info);
                
//记录这封邮件的Id
                gotEmailIds.Add(info.MessageUId);

                
//解析从Pop3服务器发送过来的邮件信息
                Mime mime=Mime.Parse(bytes);
                
                result.Add(mime);
            }
        }
        
return result;
    }


关于如何使用MIME这个类,大家可以看文档。这里提供一个简单的示例。
    public void ShowEmail(Mime m)
    {
        Console.WriteLine(
"From: {0}", m.MainEntity.From.ToAddressListString());
        
        Console.WriteLine(
"To: {0}", m.MainEntity.To.ToAddressListString());
        
        Console.WrtieLine(
"Time: {0}", m.MainEntity.Date);
        
        Console.WriteLine(
"Subject: {0}", m.MainEntity.Subject);
        
        Console.WriteLine(
"Plain Body: {0}", m.BodyText);
        
        Console.WriteLine(
"Html Body: {0}", m.BodyHtml);
    }

posted on 2007-03-16 15:46 deerchao 阅读(8271) 评论(31) 编辑 收藏

评论

#1楼 2007-04-03 17:31 david[未注册用户]

请问怎么接收邮件和添加帐户呢?
请您回答 我还会回来看的 多谢
 回复 引用   

#2楼[楼主] 2007-04-04 09:42 deerchao      

添加账户需要使用你的邮件服务器提供的方法(比如WinWebMail中你可以通过网页界面以管理员登录邮件系统,然后新建用户;hMailServer中你可以运行它专门提供的管理程序来添加);
至于接收邮件,你是指编程接收邮件还是使用客户端程序(比如Outlook, ThunderBird等)来接收?如果是通过编程接收邮件,请看我这篇文章的示例。如果是客户端程序接收,请查看客户端程序的帮助手册(和/或你的邮件服务器的帮助文档)。
 回复 引用 查看   

#3楼 2007-04-04 10:29 david[未注册用户]

对不起 我写错了 是发送邮件,通过编程的方式。
我在用lumisoft写一个邮件系统,遇到了这样的问题,不知道改怎么解决。
具体点就是说它using LumiSoft.Net.SMTP.Client名空间下的SendMessage()方法。需要一个流做参数。但这个流的格式怎么写?我用的email的标准格式如:From:<davidpgw@xschool.com>
sender:"david"
To: <lnwenyan@xschool.com>
Subject: test 123456
Date: 4/4/2007 14:17:09 +0800
但它提示no sender,请问为什么?
还有就是lumisoft的名空间下是否有添加用户的方法?我想把数据库里的N个记录中的email和密码导入到pop3服务器上,应该怎么做?
多谢您的回复!
 回复 引用   

#4楼[楼主] 2007-04-04 11:07 deerchao      

LumiSoft应该没有添加用户的功能(我猜这个不在POP3/SMTP的范围之内)。
你可以看一下你的邮件服务器是怎么存储用户名/密码的。如果存储在数据库/XML文件这样方便修改的位置的话,可以直接操作这里的数据。

发送邮件我一直用的是System.Net.Mail和DotNetOpenMail,没怎么使用过LumiSoft的SMTP Client. 如果你一定要使用LumiSoft,建议你下载LumiSoft Mail Server的源代码,看看那里是怎么处理的。
 回复 引用 查看   

#5楼 2007-04-04 11:19 david[未注册用户]

如果方便的话,可否发给我一些代码研究一下?我的邮箱是davidpgw@hotmail.com,或者您加我的msn,我有问题的话向您请教一下。
谢谢您的回复
 回复 引用   

#6楼[楼主] 2007-04-04 14:19 deerchao      

已经给您发了邮件,里面有LumiSoft MailServer的源代码的下载地址。

如果您要使用System.Net.Mail进行邮件发送,可以参考这个网站:http://www.systemnetmail.com
 回复 引用 查看   

#7楼 2007-08-14 09:28       

请问下他怎么下载附件啊,我怎么也不可以下???  回复 引用 查看   

#8楼[楼主] 2007-08-14 12:18 deerchao      

@凯
Mime类有个属性:Attachments.
具体怎么使用,请查看它的文档,并动手实验.
 回复 引用 查看   

#9楼 2007-11-21 21:19 123456789[未注册用户]

POP3_MessagesInfo infos = c.GetMessagesInfo();

这个c是哪来的啊
 回复 引用   

#10楼[楼主] 2007-11-21 21:32 deerchao      

@123456789
写错了,应该是pop3而不是c.
 回复 引用 查看   

#11楼 2007-11-21 21:35 123456789[未注册用户]

pop3.GetMessage(info);

pop3_client好像也没有getmessage这个方法啊
 回复 引用   

#12楼[楼主] 2007-11-21 21:42 deerchao      

@123456789
POP3_Client 有这个方法的,至少我用的版本有.
 回复 引用 查看   

#13楼 2007-11-21 21:45 123456789[未注册用户]

我看了文档也没有这两个方法啊,晕了  回复 引用   

#14楼 2008-02-01 10:30 小琳[未注册用户]

好像用上面的方法接收邮件...邮件标题和正文不会出现乱码..但是FROM 和TO 如果是中文的话还是会出现乱码....能否给个解决方法......................................我的邮箱是:154065197@qq.com....望您能尽快回复到我的邮箱....谢谢............................................  回复 引用   

#15楼 2008-02-25 12:56 春春罗宾汉      

写得莫名奇妙,好的类都没有不知道怎么来的
POP3_MessageInfo 没有
GetMessage 没有 源码也没有定义,不知哪跑出来的
 回复 引用 查看   

#16楼 2008-02-25 13:04 春春罗宾汉      

博主发的大多是错的,没经过测试
正确的是
http://www.cnblogs.com/aprillee/
连 List gotEmailIds; 不new 对象 这样的低层错误都犯
 回复 引用 查看   

#17楼[楼主] 2008-02-25 13:12 deerchao      

@春春罗宾汉
此帖子已经写了很久了,新版的LumiSoft.Net里类和方法名可能已经更改了,请自行从文档里查找.
 回复 引用 查看   

#18楼[楼主] 2008-02-25 13:13 deerchao      

连 List gotEmailIds; 不new 对象 这样的低层错误都犯
-------------
不知道您有没有看到这一行:
//需要首先设置这些信息
 回复 引用 查看   

#19楼 2008-07-16 15:45 敢死队      

可以用POP3_ClientMessage和POP3_ClientMessageCollection来列表邮件.  回复 引用 查看   

#20楼 2009-01-10 10:25 d1PIM      

新版本没有“POP3_MessageInfo”了,我直接用的pop3.messages取message,info=message(就这意思),但在mime.parse(info.MessageToByte())时,如果email中只有一副图片的情况下,则报错,说是索引超出范围。如果内容是文字则没有问题。
不知您研究过最新版本的LumiSoft.Net?
 回复 引用 查看   

#21楼 2009-02-04 11:02 zfhzhy      

hMailServer 怎样发送和接收邮件?,楼主能给个这方面的Demo吗?  回复 引用 查看   

#22楼 2009-02-10 18:16 single[未注册用户]

当我的附件是 .txt或.cs或其他一些比较少见的文件类型时,附件当作邮件内容输出了,即mime.BodyText里包含了附件的内容,而且附件部分的内容内容没有解码。望哪位高手指教指教,谢谢。  回复 引用   

#23楼 2009-04-08 00:22 passman[未注册用户]

急切看到哪位高人解决一下 附件编码问题啊!  回复 引用   

#24楼 2009-04-22 14:27 小cai[未注册用户]

怎样把LumiSoft.Net第三方组件,放入VS2005中啊,菜鸟求教?  回复 引用   

#25楼 2009-07-14 23:18 x_craft[未注册用户]

pop3.Connect(serv, port, reqSsl);
pop3.Authenticate(user, pass, false);

这两个方法都没有返回值,我要怎么才能知道连接失败或认证失败呢
 回复 引用   

#26楼 2009-08-10 15:30 monstercumt[未注册用户]

楼上各位的问题我都解决了。。。

现在遇到这个问题,不知道怎么解决,已经给作者发邮件了,但是还没回:

问题描述:
使用POP3_Client接收邮件的时候
网站的其它任何页面都打不开!!

各位有遇到过这种情况吗?
博主有区注意观察过吗?
 回复 引用   

#27楼 2009-09-17 11:39 denli      

请问一下,如何利用这个组件来下载邮件中的附件?
能简单的写一下吗?
 回复 引用 查看   

#28楼 2009-11-21 18:46 阿萨德撒的[未注册用户]

在我已经读取全部的邮件之后,我向再向服务器发一个请求,看看有没有新邮件。怎么发呢?  回复 引用   

#29楼 2010-07-28 11:47 佚名      

引用x_craft:
pop3.Connect(serv, port, reqSsl);
pop3.Authenticate(user, pass, false);

这两个方法都没有返回值,我要怎么才能知道连接失败或认证失败呢

IsConnected.POP3里面有这个属性。你判断一下。是否登陆成功。  回复 引用 查看   

#30楼 2011-04-08 09:54 minguiluo      

好东西。  回复 引用 查看   

#31楼 2012-01-04 21:50 cantron      

这里有一个采用hmailserver作为后台的含WEBMAIL的免费企业管理信息系统,一键自动安装,功能很全面,内外网双通,在hmailserver的基础上扩展了很多新的功能:全中文界面;内外网地址簿;最近联系人动态email地址;按内容、收件人、主题、备注、大小等多条件查询;外部地址自动调用smtp发信防止被作为垃圾邮件拒收;网络文件服务器;多条件邮件过滤等,效率也比hmailserver原版高很多,他们对hmailserver的理解可能是国内最好的,可以看看:
网站:http://www.clicksun.com.cn/
下载地址:http://www.clicksun.com.cn/download/download.asp?id=4
 回复 引用 查看