分享
 
 
 

用JavaMail API编写可带附件的邮件发送程序

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序。也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的JavaBean及一个十分轻巧的servlet。

(没有装载JavaMail API的读者,可以到此站点下载,并按照Readme.txt设置好ClassPath)

一、JavaMail中一些我们需要的类

1.Properties

JavaMail需要Properties来创建一个session对象,其属性值就是发送邮件的主机,如:

Properties props = new Properties ();

props.put("mail.smtp.host", "smtp.xxxx.com");//可以换上你的smtp主机名,就像你在OutLook中设置smtp主机名一样。

2.Session

所有的基于JavaMail的程序都至少需要一个或全部的对话目标。

Session session = Session.getInstance(props, null);

3.MimeMessage

信息对象将把你所发送的邮件真实的反映出来。

MimeMessage msg = new MimeMessage(session);

4.Transport

邮件的发送是由Transport来完成的:

Transport.send(msg);

二、我们自己创建的可发送附件的类

import java.util.* ;

import java.io.* ;

import javax.mail.* ;

import javax.mail.internet.* ;

import javax.activation.* ;

public class Mail {

//定义发件人、收件人、主题等

String to="";

String from="";

String host="";

String filename="";

String subject="";

//用于保存发送附件的文件名的集合

Vector file = new Vector();

//做一个可以传发件人等参数的构造

public Mail (String to,String from,String smtpServer,String subject){

//初始化发件人、收件人、主题等

this.to=to;

this.from=from;

this.host=smtpServer;

this.subject=subject;

}

//该方法用于收集附件名

public void attachfile(String fname){

file.addElement(fname);

}

//开始发送信件的方法

public boolean startSend(){

//创建Properties对象

Properties props = System.getProperties();

//创建信件服务器

props.put("mail.smtp.host", host);

//得到默认的对话对象

Session session=Session.getDefaultInstance(props, null); try {

//创建一个消息,并初始化该消息的各项元素

MimeMessage msg = new MimeMessage(session);

msg.setFrom(new InternetAddress(from));

InternetAddress[] address={new InternetAddress(to)};

msg.setRecipients(Message.RecipientType.TO,address);

msg.setSubject(subject);

//后面的BodyPart将加入到此处创建的Multipart中

Multipart mp = new MimeMultipart();

//利用枚举器方便的遍历集合

Enumeration efile=file.elements();

//检查序列中是否还有更多的对象

while(efile.hasMoreElements()){

MimeBodyPart mbp=new MimeBodyPart();

//选择出每一个附件名

filename=efile .nextElement().toString();

//得到数据源

FileDataSource fds=new FileDataSource(filename);

//得到附件本身并至入BodyPart

mbp.setDataHandler(new DataHandler(fds));

//得到文件名同样至入BodyPart

mbp.setFileName(fds.getName());

mp.addBodyPart(mbp);

}

//移走集合中的所有元素

file.removeAllElements();

//Multipart加入到信件

msg.setContent(mp);

//设置信件头的发送日期

msg.setSentDate(new Date());

//发送信件

Transport.send(msg);

} catch (MessagingException mex) {

mex.printStackTrace();

Exception ex = null;

if ((ex=mex.getNextException())!=null){

ex.printStackTrace();

}

return false;

}

return true;

}

}

三、一个简单的servlet

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class SendMail extends

HttpServlet implements SingleThreadModel{

public void init(ServletConfig Conf)

throws ServletException {

super.init(Conf);

}

public void doPost(HttpServletRequest

Req, HttpServletResponse Res)

throws ServletException, IOException {

try{

//实例化刚才我们做的类,并按其构造传进相应的参数

Mail sendmail=newMail("zhang@263.net",

"chtwoy@21cn.com","smtp.21cn.com","test");

sendmail.attachfile("table.pdf");

sendmail.startSend();

}catch(Exception e){

e.printStackTrace();

}

}

public void destroy() {

}

}

四、小结

至此,你已经可以在邮件中添加附件了,而且可以是多个。像这样,将响应与逻辑相分离对代码的扩展和维护是相当有好处的。若Beans与servlet不在同一个包下,别忘了“import”。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有