Java邮件发送实例

又一个新的项目启动了,虽说目前还处于系统设计阶段,但从当前的系统需求来看,其中有一项功能就是通过Web方式发送系统邮件。还是提前做好准备吧,还说不错,花了一下午的时间,把封装了一个MailService类,直接调用即可。此篇仅介绍用javamail实现发送邮件功能,其中涉及smtp认证,邮件附件发送,及HTML内容邮件等。

系统环境:Windows XP SP3

开发环境:Eclipse 3.5/JDK 1.6/Struts2/Tiles

测试工具:Firefox 3.6/IE 8

测试邮箱:网易邮箱、IBM Lotus Notes邮箱

所需JAR包:mail.jar(包含MailService.java类文件)  下载地址一  下载地址二

MailService.java类文件(经过封装的发送邮件类):

  1. package com.olympus.Util;  
  2.  
  3. import java.util.Date;  
  4. import java.util.Properties;  
  5.  
  6. import javax.activation.DataHandler;  
  7. import javax.activation.FileDataSource;  
  8. import javax.mail.Authenticator;  
  9. import javax.mail.Multipart;  
  10. import javax.mail.PasswordAuthentication;  
  11. import javax.mail.Session;  
  12. import javax.mail.Transport;  
  13. import javax.mail.internet.InternetAddress;  
  14. import javax.mail.internet.MimeBodyPart;  
  15. import javax.mail.internet.MimeMessage;  
  16. import javax.mail.internet.MimeMultipart;  
  17. import javax.mail.internet.MimeUtility;  
  18.  
  19. public class MailService extends Authenticator {  
  20.     private String m_username = null;   
  21.     private String m_userpass = null;   
  22.       
  23.     public void setUsername(String username) {   
  24.         m_username = username;   
  25.     }   
  26.       
  27.     public void setUserpass(String userpass) {   
  28.         m_userpass = userpass;   
  29.     }   
  30.       
  31.     public MailService(String username, String userpass) {   
  32.         super();   
  33.         setUsername(username);   
  34.         setUserpass(userpass);   
  35.     }   
  36.       
  37.     public PasswordAuthentication getPasswordAuthentication() {   
  38.         return new PasswordAuthentication(m_username,m_userpass);   
  39.     }   
  40.       
  41.     public static void sendmail(  
  42.             String subject, String from,   
  43.             String[] to, String text,   
  44.             String[] filenames,String mimeType) throws Exception   
  45.     {   
  46.         Properties props = new Properties();   
  47.         String smtp = "smtp.163.com";               //设置发送邮件所用到的SMTP服务器地址  
  48.         String smtpname = "username";               //设置登录SMTP服务器的用户名  
  49.         String smtppassword = "password";           //设置登录SMTP服务器的密码  
  50.           
  51.         Session mailSession;                        //邮件会话对象   
  52.         MimeMessage mimeMsg;                        //MIME邮件对象   
  53.         props = java.lang.System.getProperties();   //获得系统属性对象   
  54.           
  55.         props.put("mail.smtp.host", smtp);          //设置SMTP主机   
  56.         props.put("mail.smtp.auth""true"); //链接到SMTP服务器是否需要用户名和密码验证   
  57.           
  58.         //到服务器验证发送的用户名和密码是否正确   
  59.         MailService myEmailAuther = new MailService(smtpname, smtppassword);  
  60.         //设置邮件会话  
  61.         mailSession = Session.getInstance(props, (Authenticator) myEmailAuther);    
  62.         Transport transport = mailSession.getTransport("smtp");     //设置传输协议   
  63.         mimeMsg = new MimeMessage(mailSession);                     //设置from、to等信息  
  64.           
  65.         InternetAddress sentFrom = new InternetAddress(from);   
  66.         mimeMsg.setFrom(sentFrom); //设置发送人地址   
  67.         InternetAddress[] sendTo = new InternetAddress[to.length];   
  68.           
  69.         for (int i = 0; i < to.length; i++) {   
  70.             //System.out.println("发送到:" + to[i]);   
  71.             sendTo[i] = new InternetAddress(to[i]);   
  72.         }   
  73.           
  74.         mimeMsg.setRecipients(MimeMessage.RecipientType.TO, sendTo);   
  75.         mimeMsg.setSubject(subject, "utf-8");   
  76.         MimeBodyPart messageBodyPart1 = new MimeBodyPart();   
  77.         //messageBodyPart.setText(UnicodeToChinese(text));   
  78.         messageBodyPart1.setContent(text, mimeType);   
  79.         Multipart multipart = new MimeMultipart();//附件传输格式   
  80.         multipart.addBodyPart(messageBodyPart1);  
  81.           
  82.         for (int i = 0; i < filenames.length; i++) {   
  83.             MimeBodyPart messageBodyPart2 = new MimeBodyPart();    
  84.             String filename = filenames[i].split(",")[0];           //选择出每一个附件名   
  85.             String displayname = filenames[i].split(",")[1];   
  86.             FileDataSource fds = new FileDataSource(filename);      //得到数据源   
  87.             //得到附件本身并至入BodyPart   
  88.             messageBodyPart2.setDataHandler(new DataHandler(fds));  
  89.             //得到文件名同样至入BodyPart   
  90.             //messageBodyPart2.setFileName(displayname);   
  91.             //messageBodyPart2.setFileName(fds.getName());   
  92.             messageBodyPart2.setFileName(MimeUtility.encodeText(displayname));   
  93.             multipart.addBodyPart(messageBodyPart2);   
  94.         }  
  95.           
  96.         mimeMsg.setContent(multipart);   
  97.         mimeMsg.setSentDate(new Date());    //设置信件头的发送日期   
  98.         mimeMsg.saveChanges();    
  99.         Transport.send(mimeMsg);            //发送邮件  
  100.         transport.close();   
  101.     }   

在Action中调用

  1. @Action(value="//",  
  2.     results={@Result(name="success", location="index",type="tiles")})  
  3. public String Index(){  
  4.     String sendTo[] = {"liang.xu@ohc.olympus.com.hk"};  
  5.     String fileNames[] = {};  
  6.     try {  
  7.         MailService.sendmail(  
  8.                 "JavaWeb发送邮件测试""Alex Xu<xht555@163.com>",   
  9.                 sendTo, "JavaWeb发送邮件测试",   
  10.                 fileNames, "text/html;charset=utf-8");  
  11.     } catch (Exception e) {  
  12.         e.printStackTrace();  
  13.     }  
  14.           
  15.     return SUCCESS;  
  16. 测试结果
  17.  我的网易邮箱显示邮件发送成功:
    ② 我的工作邮箱(IBM Lotus Notes)成功接收到来自网易邮箱发出的邮件:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值