利用太阳公司提供的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的读者,可以到此站点下载,并按照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 ()