用JavaMail API编写可带附件的邮件发送措施
副标题#e#
操作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);
#p#副标题#e#
二、我们本身建设的可发送附件的类
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("[email protected]",
"[email protected]","smtp.21cn.com","test");
sendmail.attachfile("table.pdf");
sendmail.startSend();
}catch(Exception e){
e.printStackTrace();
}
}
public void destroy() {
}
}
四、小结
#p#分页标题#e#
至此,你已经可以在邮件中添加附件了,并且可以是多个。像这样,将响应与逻辑相疏散对代码的扩展和维护是相当有长处的。若Beans与servlet不在同一个包下,别忘了“import”。