邮件Web客户端相关

前段时间在忙着做Mail客户端相关的东西,挺头疼的。

网上相关信息并不是很多。主要是关于发送邮件的,主要用于对留言进行回复。这些功能主要是用在企业站上面的,对于Web客户端,还是不够的。

WebMail中包含了:收件箱、发件箱、草稿箱、已发邮件、垃圾邮件、垃圾邮件处理、签名管理、收件箱管理、文件夹管理和用户名信息管理。

其中最浪费时间的是收件箱。对于Web程序的限制,对网络的要求,性能的要求相对高点。

Mail中最重要的几个点是:能收、能发、不丢邮件、能看。

升级一下需要的东西:收的快、发的快、稳定性高,可定时收发。

 

这里首先用到的第三方组件是JMail。是jmail 在很多地方都会有人用到,这个组件中有免费版本,或许这也是其流行的一个原因。

在发送邮件时,它的优点是:可以设置邮件的优先级、支持Html邮件、可在邮件中加入图片、可多收件人、抄送;支持要SMTP发信认证的Smtp服务器;

这是网上的一段发信的代码:

/******************************************/

public bool SendMail() 

try 

jmail.MessageClass myMail = new jmail.MessageClass(); 
myMail.Charset="GB2312";//邮件使用字符集 
myMail.From = model.From; //邮件发送者邮件地址 
myMail.FromName = model.FromName; //邮件发送者名称 
myMail.AddRecipient(model.To,model.ToName,"");//添加邮件接收者名称以及邮件地址 

myMail.Subject = model.Subject; //邮件主题 
myMail.Body = model.Body; //邮件内容 
// 判断是否有附件 
if(model.FileName != "") 

myMail.AddAttachment(model.FileName,false,model.FileType);//添加邮件附件 

myMail.Priority =model.Priority; //邮件的紧急程度 
myMail.MailServerUserName = model.MailServerUserName; //登陆邮件服务器的用户名 
myMail.MailServerPassWord = model.MailServerPassWord; //登陆邮件服务器的密码 
return myMail.Send(model.MailDomain,false); //邮件服务器地址(例:smtp.163.com) 

catch(Exception ex) 

throw new Exception(this+".SendMail():"+ex.ToString()); 

/******************************************/

 

然后说收信:

收信中,有一个收信时间的问题。这个纠结了好久的时间。

当邮件服务器中有10封邮件时,收完10封。用Jmail很快速。过几天,有了一封新邮件,怎么收?

很多人会说,判断是否是未收邮件,如果是就接收,这就OK了。事实就是这样,但怎么判断是不是未收的邮件呢?

 在存入邮件到库中时候,有一个唯一ID--MailId(怎么个算法,不清楚哈)。通过读取Mail服务器上的MailId然后逐个的判断是否已经存在,存在则获取这封邮件的信息。

在邮件数量200以内,这样的方法还是可以使用的,不会太影响到速度。

 

那么,服务器有20000封呢?

IMAP 技术可以实现,只收取邮件的部分,如:Header  or Size 

 

 

未完待续……

 

posted @ 2011-12-18 22:46  cn_king  阅读(880)  评论(0编辑  收藏  举报