开发者社区> benjaminwhx> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

java实现邮件群发带附件

简介:
+关注继续查看

要完成Java群发邮件功能,首先须加入mail.jar和activation.jar这两个包

下面是邮件的例子:


[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;</span>  
  2.   
  3. <span style="background-color: rgb(255, 255, 255);">import java.io.File;  
  4. import java.util.Properties;  
  5. import java.util.Vector;  
  6. import javax.mail.internet.MimeUtility;  
  7. /**  
  8.  * 发送邮件的信息类  
  9.  * @author Benjamin  
  10.  * @version 2014.3.11  
  11.  *  
  12.  */  
  13. public class MailSenderInfo {      
  14.     // 发送邮件的服务器的IP和端口      
  15.     private String mailServerHost;      
  16.     private String mailServerPort = "25";      
  17.     // 邮件发送者的地址      
  18.     private String fromAddress;      
  19.     // 邮件接收者的地址      
  20.     private String[] toAddress;      
  21.     // 登陆邮件发送服务器的用户名和密码      
  22.     private String userName;      
  23.     private String password;      
  24.     // 是否需要身份验证      
  25.     private boolean validate = false;      
  26.     // 邮件主题      
  27.     private String subject;      
  28.     // 邮件的文本内容      
  29.     private String content;      
  30.     // 邮件附件的文件名      
  31.     private String fileName = "" ;      
  32.     //附件文件集合  
  33.     private Vector<File> file = new Vector<File>() ;  
  34.       
  35.     /**  
  36.      * 获得邮件会话属性     
  37.      * @return  
  38.      */  
  39.     public Properties getProperties(){      
  40.       Properties p = new Properties();      
  41.       p.put("mail.smtp.host", this.mailServerHost);      
  42.       p.put("mail.smtp.port", this.mailServerPort);      
  43.       p.put("mail.smtp.auth", validate ? "true" : "false");      
  44.       return p;      
  45.     }      
  46.     public String getMailServerHost() {      
  47.       return mailServerHost;      
  48.     }      
  49.     public void setMailServerHost(String mailServerHost) {      
  50.       this.mailServerHost = mailServerHost;      
  51.     }     
  52.     public String getMailServerPort() {      
  53.       return mailServerPort;      
  54.     }     
  55.     public void setMailServerPort(String mailServerPort) {      
  56.       this.mailServerPort = mailServerPort;      
  57.     }     
  58.     public boolean isValidate() {      
  59.       return validate;      
  60.     }     
  61.     public void setValidate(boolean validate) {      
  62.       this.validate = validate;      
  63.     }     
  64.     public String getFromAddress() {      
  65.       return fromAddress;      
  66.     }      
  67.     public void setFromAddress(String fromAddress) {      
  68.       this.fromAddress = fromAddress;      
  69.     }     
  70.     public String getPassword() {      
  71.       return password;      
  72.     }     
  73.     public void setPassword(String password) {      
  74.       this.password = password;      
  75.     }     
  76.     public String[] getToAddress() {      
  77.       return toAddress;      
  78.     }      
  79.     public void setToAddress(String[] toAddress) {      
  80.       this.toAddress = toAddress;      
  81.     }      
  82.     public String getUserName() {      
  83.       return userName;      
  84.     }     
  85.     public void setUserName(String userName) {      
  86.       this.userName = userName;      
  87.     }     
  88.     public String getSubject() {      
  89.       return subject;      
  90.     }     
  91.     public void setSubject(String subject) {      
  92.       this.subject = subject;      
  93.     }     
  94.     public String getContent() {      
  95.       return content;      
  96.     }     
  97.     public void setContent(String textContent) {      
  98.       this.content = textContent;      
  99.     }      
  100.     public String getFileName() {  
  101.         return fileName;  
  102.     }  
  103.     public void setFileName(String fileName) {  
  104.         this.fileName = fileName;  
  105.     }  
  106.     public Vector<File> getFile() {  
  107.         return file;  
  108.     }  
  109.     public void setFile(Vector<File> file) {  
  110.         this.file = file;  
  111.     }  
  112.     /**    
  113.       *    
  114.       * 方法说明:把主题转换为中文   
  115.       * 输入参数:String strText   
  116.       * 返回类型:    
  117.       */      
  118.      public String transferChinese(String strText) {      
  119.          try {      
  120.              strText = MimeUtility.encodeText(new String(strText.getBytes(),      
  121.                      "GB2312"), "GB2312", "B");      
  122.          } catch (Exception e) {      
  123.              e.printStackTrace();      
  124.          }      
  125.          return strText;      
  126.      }    
  127. }     
  128. </span>  


[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;  
  2.   
  3.   
  4. import javax.mail.Authenticator;  
  5. import javax.mail.PasswordAuthentication;  
  6.    /** 
  7.     * 发邮件的身份验证器 
  8.     * @author Benjamin 
  9.     * @version 2014.3.11 
  10.     * 
  11.     */  
  12. public class MyAuthenticator extends Authenticator{     
  13.   String userName=null;     
  14.   String password=null;     
  15.         
  16.   public MyAuthenticator(){     
  17.       
  18.   }     
  19.   public MyAuthenticator(String username, String password) {      
  20.       this.userName = username;      
  21.       this.password = password;      
  22.   }    
  23.   protected PasswordAuthentication getPasswordAuthentication(){     
  24.       return new PasswordAuthentication(userName, password);     
  25.   }     
  26. }     
  27. </span>  


[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;  
  2.   
  3. import java.io.File;  
  4. import java.util.Date;  
  5. import java.util.Enumeration;  
  6. import java.util.Properties;  
  7. import java.util.Vector;  
  8.   
  9. import javax.activation.DataHandler;  
  10. import javax.activation.FileDataSource;  
  11. import javax.mail.Address;  
  12. import javax.mail.BodyPart;  
  13. import javax.mail.Message;  
  14. import javax.mail.MessagingException;  
  15. import javax.mail.Multipart;  
  16. import javax.mail.Session;  
  17. import javax.mail.Transport;  
  18. import javax.mail.internet.InternetAddress;  
  19. import javax.mail.internet.MimeBodyPart;  
  20. import javax.mail.internet.MimeMessage;  
  21. import javax.mail.internet.MimeMultipart;  
  22.     
  23. public class SimpleMailSender  {      
  24. /** *//**    
  25.   * 以文本格式发送邮件    
  26.   * @param mailInfo 待发送的邮件的信息    
  27.   */      
  28.     public boolean sendTextMail(MailSenderInfo mailInfo) {      
  29.       // 判断是否需要身份认证      
  30.       MyAuthenticator authenticator = null;      
  31.       Properties pro = mailInfo.getProperties();     
  32.       if (mailInfo.isValidate()) {      
  33.       // 如果需要身份认证,则创建一个密码验证器      
  34.         authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());      
  35.       }     
  36.       // 根据邮件会话属性和密码验证器构造一个发送邮件的session      
  37.       Session sendMailSession = Session.getDefaultInstance(pro,authenticator);      
  38.       try {      
  39.       // 根据session创建一个邮件消息      
  40.       Message mailMessage = new MimeMessage(sendMailSession);      
  41.       // 创建邮件发送者地址    authenticator  
  42.       Address from = new InternetAddress(mailInfo.getFromAddress());      
  43.       // 设置邮件消息的发送者      
  44.       mailMessage.setFrom(from);      
  45.       // 创建邮件的接收者地址,并设置到邮件消息中      
  46.       String[] mailToAddress = mailInfo.getToAddress() ;  
  47.       int len = mailToAddress.length ;  
  48.       Address to[] = new InternetAddress[len] ;  
  49.       for(int i=0;i<len;i++){  
  50.           to[i] = new InternetAddress(mailToAddress[i]) ;  
  51.       }  
  52.       // Message.RecipientType.TO属性表示接收者的类型为TO      
  53.       //TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人。  
  54.       mailMessage.setRecipients(Message.RecipientType.TO,to);  
  55.       // 设置邮件消息的主题      
  56.       mailMessage.setSubject(mailInfo.getSubject());      
  57.       // 设置邮件消息发送的时间      
  58.       mailMessage.setSentDate(new Date());      
  59.       // 设置邮件消息的主要内容      
  60.       String mailContent = mailInfo.getContent();      
  61.       mailMessage.setText(mailContent);      
  62.       // 发送邮件      
  63.       Transport.send(mailMessage);     
  64.       return true;      
  65.       } catch (MessagingException ex) {      
  66.           ex.printStackTrace();      
  67.       }      
  68.       return false;      
  69.     }      
  70.          
  71.     /** *//**    
  72.       * 以HTML格式发送邮件    
  73.       * @param mailInfo 待发送的邮件信息    
  74.       */      
  75.     public boolean sendHtmlMail(MailSenderInfo mailInfo){      
  76.       // 判断是否需要身份认证      
  77.       MyAuthenticator authenticator = null;     
  78.       Properties pro = mailInfo.getProperties();     
  79.       //如果需要身份认证,则创建一个密码验证器       
  80.       if (mailInfo.isValidate()) {      
  81.         authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());     
  82.       }      
  83.       // 根据邮件会话属性和密码验证器构造一个发送邮件的session      
  84.       Session sendMailSession = Session.getDefaultInstance(pro,authenticator);      
  85.       try {      
  86.       // 根据session创建一个邮件消息      
  87.       Message mailMessage = new MimeMessage(sendMailSession);      
  88.       // 创建邮件发送者地址      
  89.       Address from = new InternetAddress(mailInfo.getFromAddress());      
  90.       // 设置邮件消息的发送者      
  91.       mailMessage.setFrom(from);      
  92.       // 创建邮件的接收者地址,并设置到邮件消息中      
  93.       String[] mailToAddress = mailInfo.getToAddress() ;  
  94.       int len = mailToAddress.length ;  
  95.       Address to[] = new InternetAddress[len] ;  
  96.       for(int i=0;i<len;i++){  
  97.           to[i] = new InternetAddress(mailToAddress[i]) ;  
  98.       }  
  99.       // Message.RecipientType.TO属性表示接收者的类型为TO  
  100.       //mailMessage.setRecipient(Message.RecipientType.TO, to) ;  
  101.       mailMessage.setRecipients(Message.RecipientType.TO,to);      
  102.       // 设置邮件消息的主题      
  103.       mailMessage.setSubject(mailInfo.getSubject());      
  104.       // 设置邮件消息发送的时间      
  105.       mailMessage.setSentDate(new Date());      
  106.       // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象      
  107.       Multipart mainPart = new MimeMultipart();      
  108.       // 创建一个包含HTML内容的MimeBodyPart      
  109.       BodyPart html = new MimeBodyPart();      
  110.       // 设置HTML内容      
  111.       html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");      
  112.       mainPart.addBodyPart(html);      
  113.       //向multipart中添加附件  
  114.       Vector<File> file = mailInfo.getFile() ;  
  115.       String fileName = mailInfo.getFileName() ;  
  116.       Enumeration<File> efile = file.elements() ;  
  117.       while(efile.hasMoreElements()){  
  118.           MimeBodyPart mdpFile = new MimeBodyPart() ;  
  119.           fileName = efile.nextElement().toString() ;  
  120.           FileDataSource fds = new FileDataSource(fileName) ;  
  121.           mdpFile.setDataHandler(new DataHandler(fds)) ;  
  122.           //这个方法可以解决乱码问题  
  123.           String fileName1 = new String(fds.getName().getBytes(),"ISO-8859-1") ;  
  124.           mdpFile.setFileName(fileName1) ;  
  125.           mainPart.addBodyPart(mdpFile) ;  
  126.       }  
  127.       file.removeAllElements() ;  
  128.       // 将MiniMultipart对象设置为邮件内容      
  129.       mailMessage.setContent(mainPart);      
  130.       // 发送邮件      
  131.       Transport.send(mailMessage);      
  132.       return true;      
  133.       } catch (Exception ex) {      
  134.           ex.printStackTrace();      
  135.       }      
  136.       return false;      
  137.     }      
  138. }     
  139. </span>  

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;  
  2.   
  3. import java.io.File;  
  4. import java.util.Vector;  
  5.   
  6. public class SendMail {  
  7.     public static void main(String[] args) {  
  8.         try {  
  9.             MailSenderInfo mailInfo = new MailSenderInfo();  
  10.             // 设置邮件服务器类型  
  11.             mailInfo.setMailServerHost("smtp.qq.com");  
  12.             //设置端口号  
  13.             mailInfo.setMailServerPort("25");  
  14.             //设置是否验证  
  15.             mailInfo.setValidate(true);  
  16.             //设置用户名、密码、发送人地址  
  17.             mailInfo.setUserName("449261417@qq.com");  
  18.             mailInfo.setPassword("*******");// 您的邮箱密码  
  19.             mailInfo.setFromAddress("449261417@qq.com");  
  20.             /** 
  21.              * 附件 
  22.              */  
  23.             Vector<File> file = new Vector<File>() ;  
  24.             File f1 = new File("d:/1.txt") ;  
  25.             File f2 = new File("d:/2.txt") ;  
  26.             File f3 = new File("d:/cn.csv") ;  
  27.             File f4 = new File("C:/Documents and Settings/Administrator/My Documents/Downloads/mail.jar/mail.jar") ;  
  28.             file.add(f1) ;  
  29.             file.add(f2) ;  
  30.             file.add(f3) ;  
  31.             file.add(f4) ;  
  32.             mailInfo.setFile(file) ;  
  33.             /** 
  34.              * 收件人邮箱 
  35.              */  
  36.             String[] mailToAddress = {"wuhaixu449261417@sina.com"} ;  
  37.             mailInfo.setToAddress(mailToAddress);  
  38.             mailInfo.setSubject("测试");  
  39.             mailInfo.setContent("注册地址 <a href=\"www.baidu.com\" target='_blank'>百度</a>");  
  40.             // 这个类主要来发送邮件  
  41.             SimpleMailSender sms = new SimpleMailSender();  
  42.             // sms.sendTextMail(mailInfo);// 发送文体格式  
  43.             if(sms.sendHtmlMail(mailInfo)){  
  44.                 System.out.println("mail send True!");  
  45.             }// 发送html格式  
  46.             else{  
  47.                 System.out.println("mail send False!");  
  48.             }  
  49.         } catch (Exception e) {  
  50.             e.printStackTrace() ;  
  51.         }  
  52.     }  
  53. }</span>  

以上实现了javamail的群发送功能。目前只测试了几个邮箱,有什么问题给我留言,我去改进。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java实现发送邮件功能
Java实现发送邮件功能
0 0
java实现发送邮件功能
项目中实现发送邮件功能,先书写一个小Demo,记录如下:   POM.XML中导入依赖   javax.mail mail 1.
884 0
Java实现单词计数MapReduce
本文分享实现单词计数MapReduce的方法
0 0
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
0 0
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
0 0
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
0 0
java实现spring boot项目启动时,重启Windows进程
java实现spring boot项目启动时,重启Windows进程
0 0
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
如果要在某一个界面里面添加功能的话,都在一个类中,会显得代码难以阅读,而且修改起来也会很困难,所以我们将游戏主界面、登录界面、以及注册界面都单独编成一个类,每一个类都继承JFrame父类,并且在类中创建方法来来实现页面
0 0
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
0 0
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现
注意由于我们计步功能的步数要在重写方法中用到,所以不能将初始化语句写在方法体内,而是要写在成员位置。在其名字的时候也要做到“见名知意”,所以我们给它起名字为step
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA开发手册1.5.0
立即下载
《Java开发手册》2019最新版发布!
立即下载
Java 8 简明教程
立即下载