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

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


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


<强>一、JavaMail中一些我们需要的类


1。属性


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


属性道具=new属性   ();
props.put (“mail.smtp.host”,   " smtp.xxxx.com ");//可以换上你的smtp主机名,就像你在前景中设置smtp主机名一样。


2。会话


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


会话会话=Session.getInstance(道具、   零);


3。将


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


MimeMessage味精=new   MimeMessage(会话);


4。交通


邮件的发送是由运输来完成的:


Transport.send(味精);


<强>二,我们自己创建的可发送附件的类


进口java.util。*;
java导入。*;
导入   javax.mail。*;
进口javax.mail.internet。*
导入   javax.activation。*;
公共类邮件   {
//定义发件人,收件的人,主题等
字符串=" ";
字符串=" ";
字符串主机=" ";
字符串文件名=" ";
字符串   主题=" ";
//用于保存发送附件的文件名的集合
=new矢量文件   向量();
//做一个可以传发件人等参数的构造
公共邮件(字符串,字符串   smtpServer,字符串,字符串   主题){
//初始化发件人,收件的人,主题等
this.to=,
this.from=,
this.host=smtpServer;
this.subject=主题;}

//该方法用于收集附件名
  空白attachfile(字符串   帧){
file.addElement(帧);}

//开始发送信件的方法
  布尔startSend () {
//创建属性对象
属性道具=System.getProperties ();
//创建信件服务器
props.put (“mail.smtp.host”,   主机);
//得到默认的对话对象
会话   会话=会话。getDefaultInstance(道具、空);试一试   {
//创建一个消息,并初始化该消息的各项元素
MimeMessage味精=new   MimeMessage(会话);
msg.setFrom(新   InternetAddress ());
InternetAddress[]={新地址   InternetAddress ()};
msg.setRecipients (Message.RecipientType.TO、地址);
msg.setSubject(主题),
//后面的BodyPart将加入到此处创建的多部分中
多部分   议员=new MimeMultipart ();
//利用枚举器方便的遍历集合
枚举   efile=file.elements ();
//检查序列中是否还有更多的对象
, (efile.hasMoreElements ()) {
MimeBodyPart   mbp=new MimeBodyPart ();
//选择出每一个附件名
=efile文件名   .toString .nextElement () ();
//得到数据源
FileDataSource fds=new   FileDataSource(文件名);
//得到附件本身并至入BodyPart
mbp.setDataHandler(新   DataHandler (fds));
//得到文件名同样至入BodyPart
mbp.setFileName (fds.getName ());
mp.addBodyPart (mbp);}

//移走集合中的所有元素
file.removeAllElements ();
//多部分加入到信件
msg.setContent (mp);
//设置信件头的发送日期
msg.setSentDate(新   日期());
//发送信件
Transport.send(味精);
}   (MessagingException墨西哥人){
mex.printStackTrace ();
异常交货=零;
如果   ((=mex.getNextException交货())!=null) {
ex.printStackTrace ();}

返回   错误的;
}
返回   真的,
}
}


<强>三,一个简单的servlet


进口javax.servlet。*;
导入   javax.servlet.http。*;
进口. io . *;
SendMail公共类   扩展HttpServlet实现SingleThreadModel {

公共空白   init (ServletConfig Conf)
ServletException扔   {
super.init(参看);}

公共空白   doPost (HttpServletRequest
点播,HttpServletResponse Res)
抛出   ServletException, IOException   {
尝试{
//实例化刚才我们做的类,并按其构造传进相应的参数
邮件   sendmail=newMail (“zhang@263.net”,
“chtwoy@21cn.com”、“smtp.21cn.com”、“测试”),
sendmail.attachfile (“table.pdf”);
sendmail.startSend ();
}(异常   e) {
e.printStackTrace ();}

}
公共空白   destroy ()   

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