deerchao的blog

Be and aware 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 阅读(2225) 评论(19)  编辑 收藏 网摘

评论

#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来列表邮件.   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-11-21 21:43 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接:


 
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

给网络添加价值,就是让自己增加价值.

本博客所有内容,均为原创或对互联网已有资源的再加工,希望对你有用.在声明原作者的前提下,你可以任意使用,但本人对其正确性,使用的后果等不做任何担保,也不负任何责任.

正则表达式30分钟入门教程 v2.21 2007-8-3

I Want Spec#!

与我联系

搜索

 

常用链接

留言簿(66)

我管理的小组

我的标签

随笔档案(127)

文章分类(9)

文章档案(9)

新闻档案(9)

Links

积分与排名

最新评论

评论排行榜