转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
用JavaMail API编写可带附件的邮件发送程序         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:743 更新时间:2009/4/22 23:27:31
   利用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”。 157


[VB.NET程序]Auto Complete combo Box(VB.NET Source Use API…  [VB.NET程序]在 VB 中使用 Unicode API
[VB.NET程序]API 更改系统菜单条目  [VB.NET程序]在VB中调用Windows API的注意事项
[VB.NET程序]vb调用winInet API接口post数据到指定的url  [VB.NET程序]如 何 用 API 播 放 CD
[VB.NET程序]VB5.0与Windows API 间的呼叫技巧  [VB.NET程序]在VB6中用WINDOWS API函数读写INI文件
[VB.NET程序]Visual Basic调用Windows API函数的应用举例  [VB.NET程序]VB + API 获取 IE 的 代理服务器 配制
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台