JAVA编程:javamail发送邮件
进而能拉拢大多数程序员用windows产品。并且从ASP.NETAJAX可以跨平台这一点上,间接证明了我们的推断,至少证明了微软做过这方面的研究。所以如果哪一天突然听说了.net可以跨平台了,那么请不要吃惊,如果这一天真的到来,java就到了真正和.net决战的时刻。因为不到万不得以的时候微软是不会推出跨平台的.net的,如果跨平台的.net还不足以对抗java的话,那么微软还剩的手段就是开源了,呵呵。发送邮件/*在java版常常看到有人问怎样用javamail发送邮件?怎样吸收邮件?怎样会见多个文件夹等。成绩零星,而汗青的复兴早已吞没在成绩的陆地当中。
自己之前所做过一个java项目,个中包括有WebMail功效,现在为用java完成而对javamail探索了一段工夫,总算有点劳绩。看到论坛中的常常有此方面的成绩,因而把我的一些履历帖出来,但愿对人人有些匡助。
此篇仅先容用javamail完成发送邮件功效,个中触及smtp认证,邮件附件发送,及HTML内容邮件等。
别的有关多邮箱的完成,吸收POP3邮件及IMAP等外容,将在后续文章中先容。
以下程序必要:javamail,JAF包,j2ee.jar包括了上述两个包,倡议人人安装J2SDKEE或间接拷贝j2ee.jar,将其增加到jbuilder的library中,或体系ClassPath中
*/
packagecom.me.util.mail;
/**
*@authorZhangkunaistill@msn.com
*@version1.0
*/
importjava.util.*;
importjavax.mail.*;
importjavax.mail.internet.*;
importjava.util.Date;
importjavax.activation.*;
importjava.io.*;
importcom.me.util.*;
publicclasssendMail{
privateMimeMessagemimeMsg;//MIME邮件对象
privateSessionsession;//邮件会话对象
privatePropertiesprops;//体系属性
privatebooleanneedAuth=false;//smtp是不是必要认证
privateStringusername="";//smtp认证用户名和暗码
privateStringpassword="";
privateMultipartmp;//Multipart对象,邮件内容,题目,附件等外容均增加到个中后再天生MimeMessage对象
/**
*
*/
publicsendMail(){
setSmtpHost(getConfig.mailHost);//假如没有指定邮件服务器,就从getConfig类中猎取
createMimeMessage();
}
publicsendMail(Stringsmtp){
setSmtpHost(smtp);
createMimeMessage();
}
/**
*@paramhostNameString
*/
publicvoidsetSmtpHost(StringhostName){
System.out.println("设置体系属性:mail.smtp.host="+hostName);
if(props==null)props=System.getProperties();//取得体系属性对象
props.put("mail.smtp.host",hostName);//设置SMTP主机
}
/**
*@returnboolean
*/
publicbooleancreateMimeMessage()
{
try{
System.out.println("筹办猎取邮件会话对象!");
session=Session.getDefaultInstance(props,null);//取得邮件会话对象
}
catch(Exceptione){
System.err.println("猎取邮件会话对象时产生毛病!"+e);
returnfalse;
}
System.out.println("筹办创立MIME邮件对象!");
try{
mimeMsg=newMimeMessage(session);//创立MIME邮件对象
mp=newMimeMultipart();
returntrue;
}
catch(Exceptione){
System.err.println("创立MIME邮件对象失利!"+e);
returnfalse;
}
}
/**
*@paramneedboolean
*/
publicvoidsetNeedAuth(booleanneed){
System.out.println("设置smtp身份认证:mail.smtp.auth="+need);
if(props==null)props=System.getProperties();
if(need){
props.put("mail.smtp.auth","true");
}else{
props.put("mail.smtp.auth","false");
}
}
/**
*@paramnameString
*@parampassString
*/
publicvoidsetNamePass(Stringname,Stringpass){
username=name;
password=pass;
}
/**
*@parammailSubjectString
*@returnboolean
*/
publicbooleansetSubject(StringmailSubject){
System.out.println("设置邮件主题!");
try{
mimeMsg.setSubject(mailSubject);
returntrue;
}
catch(Exceptione){
System.err.println("设置邮件主题产生毛病!");
returnfalse;
}
}
/**
*@parammailBodyString
*/
publicbooleansetBody(StringmailBody){
try{
BodyPartbp=newMimeBodyPart();
bp.setContent("<metahttp-equiv=Content-Typecontent=text/html;charset=gb2312>"+mailBody,"text/html;charset=GB2312");
mp.addBodyPart(bp);
returntrue;
}
catch(Exceptione){
System.err.println("设置邮件注释时产生毛病!"+e);
returnfalse;
}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleanaddFileAffix(Stringfilename){
System.out.println("增添邮件附件:"+filename);
try{
BodyPartbp=newMimeBodyPart();
FileDataSourcefileds=newFileDataSource(filename);
bp.setDataHandler(newDataHandler(fileds));
bp.setFileName(fileds.getName());
mp.addBodyPart(bp);
returntrue;
}
catch(Exceptione){
System.err.println("增添邮件附件:"+filename+"产生毛病!"+e);
returnfalse;
}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansetFrom(Stringfrom){
System.out.println("设置发信人!");
try{
mimeMsg.setFrom(newInternetAddress(from));//设置发信人
returntrue;
}
catch(Exceptione)
{returnfalse;}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansetTo(Stringto){
if(to==null)returnfalse;
try{
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
returntrue;
}
catch(Exceptione)
{returnfalse;}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansetCopyTo(Stringcopyto)
{
if(copyto==null)returnfalse;
try{
mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
returntrue;
}
catch(Exceptione)
{returnfalse;}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansendout()
{
try{
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在发送邮件....");
SessionmailSession=Session.getInstance(props,null);
Transporttransport=mailSession.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"),username,password);
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
//transport.send(mimeMsg);
System.out.println("发送邮件乐成!");
transport.close();
returntrue;
}
catch(Exceptione)
{
System.err.println("邮件发送失利!"+e);
returnfalse;
}
}
/**
*Justdoitasthis
*/
publicstaticvoidmain(String[]args){
Stringmailbody="<metahttp-equiv=Content-Typecontent=text/html;charset=gb2312>"+
"<divalign=center><ahref=http://www.csdn.net>csdn</a></div>";
sendMailthemail=newsendMail("smtp.msn.com");
themail.setNeedAuth(true);
if(themail.setSubject("题目")==false)return;
if(themail.setBody(mailbody)==false)return;
if(themail.setTo("gates@msn.com")==false)return;
if(themail.setFrom("bill@msn.com")==false)return;
if(themail.addFileAffix("c:oot.ini")==false)return;
themail.setNamePass("user","password");
if(themail.sendout()==false)return;
}
}
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
页:
[1]