上一篇:学习javabean >>
用JavaMail API编写可带附件的邮件发送程序
(没有装载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”。
下一篇:javascript调用JAVA >>
相关文章:
- · Java 类中类属性和对象属性的初始化顺序
- · Java中异常机制的深入研究
- · Java多线程编程经验谈
- · Java中精确计算的一个类用BigDecimal
- · Java IO学习基础之读写文本文件
- · java小技巧
- · java关于日期的运算等处理方法
- · javac-----Java编程语言编译器
- · java中的常见问题
- · java中文件长度的转换
- · 【Java】命令行参数的获取及判断
- · Java 理论和实践:我必须对那些内容进行文档编制吗?
- · Java 理论与实践:嗨,我的线程到哪里去了?
- · Java 理论和实践:那是您的最终答案吗?
- · Java 理论与实践:变还是不变?
- · Java 理论与实践: 哈希
- · Java 理论与实践: Web 层的状态复制
- · java快速排序函数
- · Java多线程中的两个问题
- · JAVA中用动态代理类实现记忆功能
- · 简要JAVA数据类型转换
- · 变态级JAVA程序员面试32问
- · 最简单的java分页算法
- · 一个体现Java接口及工厂模式优点的例子
- · java连接oracle,取io文件内容,子串替换
- · Java面试中的陷阱
- · Java常见问题集锦
- · Java中文问题详解,底层编码解剖
- · Applet调用javascript函数
- · 轻轻松松作兼职(java)
- · Java的封装类
- · Java之util类
- · Java Swing入门基础
- · 浅析Java的“克隆”方法
- · Java线程模型缺陷研究
- · 学习JAVA的笔记(一)
- · 漫谈Java语言的接口与类型安全
- · Java开源项目Hibernate包作用详解
