Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490316
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:38:54

下载本文示例代码
  利用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);//得到附件本身并至入BodyPartmbp.setDataHandler(new DataHandler(fds));//得到文件名同样至入BodyPartmbp.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 extendsHttpServlet implements SingleThreadModel{public void init(ServletConfig Conf)throws ServletException {super.init(Conf);}public void doPost(HttpServletRequestReq, 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”。   利用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);//得到附件本身并至入BodyPartmbp.setDataHandler(new DataHandler(fds));//得到文件名同样至入BodyPartmbp.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 extendsHttpServlet implements SingleThreadModel{public void init(ServletConfig Conf)throws ServletException {super.init(Conf);}public void doPost(HttpServletRequestReq, 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”。 下载本文示例代码


用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序用JavaMail API编写可带附件的邮件发送程序
阅读(301) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~