java-给多人发送邮件

依赖的pom文件

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>   
   <groupId>javax.mail</groupId>    
   <artifactId>mail</artifactId>    
  <version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation --><dependency> 
    <groupId>javax.activation</groupId>    
    <artifactId>activation</artifactId>   
    <version>1.1</version></dependency>
<!-- https://mvnrepository.com/artifact/org.tinygroup/logger -->
<dependency>
     <groupId>org.tinygroup</groupId> 
         <artifactId>logger</artifactId>   
    <version>0.0.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
<dependency>   
     <groupId>org.apache.commons</groupId>    
     <artifactId>commons-email</artifactId>  
     <version>1.4</version>
</dependency>

用到的jar包的pom文件如上图

第1步封装发邮件邮件信息的Bean类

package util.sendmail;/** * Created by cxf on 16/11/7. */
import java.util.List;
import java.util.Properties;
public class MailSenderInfoBean {    
// 发送邮件的服务器的IP和端口    
private String mailServerHost;
private String mailServerPort = "25";
// 邮件发送者的地址
private String fromAddress;
// 邮件接收者的地址
private List<String> toAddress;
// 登陆邮件发送服务器的用户名和密码
private String userName;
private String password;

// 是否需要身份验证
private boolean validate = false;
// 邮件主题
private String subject;
// 邮件的文本内容
private String content;
// 邮件附件的文件名
private List<String> attachFileNames;

public Properties getProperties(){   
 Properties p = new Properties();  
  p.put("mail.smtp.host", this.mailServerHost);      
  p.put("mail.smtp.port", this.mailServerPort);     
  p.put("mail.smtp.auth", validate ? "true" : "false");    
  p.put("mail.mime.address.strict", "false");   
          return p;}

// get  set all the source    省略了
package util.sendmail;
/** * Created by cxf on 16/11/7. */
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MyAuthenticator extends Authenticator{    
           String userName=null;    
           String password=null;   
  public MyAuthenticator(){    }   
 public MyAuthenticator(String username, String password) {  
           this.userName = username;       
           this.password = password;    }  

  protected PasswordAuthentication getPasswordAuthentication(){        
        return new PasswordAuthentication(userName, password);    }}

package util.sendmail;
/** * Created by cxf on 16/11/7. */
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class SimpleMailSender {  
  /**     * 以文本格式发送邮件   
  * @param mailInfo 待发送的邮件的信息     */   
 public boolean sendTextMail(MailSenderInfoBean mailInfo) {      
  // 判断是否需要身份认证       
 MyAuthenticator authenticator = null;      
  Properties pro = mailInfo.getProperties();     
   if (mailInfo.isValidate()) {          
  // 如果需要身份认证,则创建一个密码验证器          
  authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());        }      
  // 根据邮件会话属性和密码验证器构造一个发送邮件的session  
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
    try {         
   // 根据session创建一个邮件消息    
        Message mailMessage = new MimeMessage(sendMailSession);        
    // 创建邮件发送者地址         
   Address from = new InternetAddress(mailInfo.getFromAddress());            // 设置邮件消息的发送者        
   mailMessage.setFrom(from);         
   // 创建邮件的接收者地址,并设置到邮件消息中   
     List<String> toAddress=null;   
         if(mailInfo.getToAddress().size()>1){     
            toAddress=mailInfo.getToAddress();             
           Address[] address =new InternetAddress[toAddress.size()];                for (int i = 0; i < toAddress.size(); i++) {         
           address[i]=new InternetAddress(toAddress.get(i));                }                
           mailMessage.setRecipients(Message.RecipientType.TO,address);  
          }else{         
           toAddress=mailInfo.getToAddress();       
         Address to = new InternetAddress(toAddress.get(0));                
     // Message.RecipientType.TO属性表示接收者的类型为TO  
         mailMessage.setRecipient(Message.RecipientType.TO,to);            }            // 设置邮件消息的主题            mailMessage.setSubject(mailInfo.getSubject());        
    // 设置邮件消息发送的时间          
          mailMessage.setSentDate(new Date());      
      // 设置邮件消息的主要内容         
          String mailContent = mailInfo.getContent();  
          mailMessage.setText(mailContent);         
      // 发送邮件           
       Transport.send(mailMessage);   
         return true;        } 
      catch (MessagingException ex) {       
     ex.printStackTrace();        }     
   return false;    }   
 /**     * 以HTML格式发送邮件     
* @param mailInfo 待发送的邮件信息    
 * @throws UnsupportedEncodingException     */    
public static boolean sendHtmlMail(MailSenderInfoBean mailInfo) throws UnsupportedEncodingException{    
    // 判断是否需要身份认证       
 MyAuthenticator authenticator = null;    
    Properties pro = mailInfo.getProperties();   
     //如果需要身份认证,则创建一个密码验证器  
      if (mailInfo.isValidate()) {         
   authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());        }     
   // 根据邮件会话属性和密码验证器构造一个发送邮件的session        Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
    try {        
    // 根据session创建一个邮件消息        
    Message mailMessage = new MimeMessage(sendMailSession); 
           // 创建邮件发送者地址          
  Address from = new InternetAddress(mailInfo.getFromAddress());   
         // 设置邮件消息的发送者           
 mailMessage.setFrom(from);         
   // 创建邮件的接收者地址,并设置到邮件消息中       
     List<String> toAddress=null;            if(mailInfo.getToAddress().size()>1){       
         toAddress=mailInfo.getToAddress();     
           Address[] address =new InternetAddress[toAddress.size()];                for (int i = 0; i < toAddress.size(); i++) {         
           address[i]=new InternetAddress(toAddress.get(i));                }                mailMessage.setRecipients(Message.RecipientType.TO,address);    
        }else{        
        toAddress=mailInfo.getToAddress();           
     Address to = new InternetAddress(toAddress.get(0));             
   // Message.RecipientType.TO属性表示接收者的类型为TO                
mailMessage.setRecipient(Message.RecipientType.TO,to);            }            
// 设置邮件消息的主题  
          mailMessage.setSubject(mailInfo.getSubject());       
     // 设置邮件消息发送的时间          
  mailMessage.setSentDate(new Date());      
      // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象            
Multipart mainPart = new MimeMultipart();       
     // 创建一个包含HTML内容的MimeBodyPart         
   BodyPart html = new MimeBodyPart();        
    // 设置HTML内容       
     html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");        
    mainPart.addBodyPart(html);      
      if(mailInfo.getAttachFileNames()!=null){        
        List<String> attachFileNames = mailInfo.getAttachFileNames();                for (String path : attachFileNames) {                    html=new MimeBodyPart();                    FileDataSource fds=new FileDataSource(path); //得到数据源                    html.setDataHandler(new DataHandler(fds)); 
//得到附件本身并至入BodyPart                   
 //此处是为了解决附件中文名乱码的问题               
     String fileName= MimeUtility.encodeText(fds.getName());  
                  html.setFileName(fileName); 
 //得到文件名同样至入BodyPart                    mainPart.addBodyPart(html);                }            }        
    // 将MiniMultipart对象设置为邮件内容      
      mailMessage.setContent(mainPart);          
  // 发送邮件            Transport.send(mailMessage);        
    return true;        } catch (MessagingException ex) {      
      ex.printStackTrace();        }       
 return false;    }
    public static void main(String[] args) {     
   //这个类主要是设置邮件        
MailSenderInfoBean mailInfo = new MailSenderInfoBean(); 
       mailInfo.setMailServerHost("smtp.163.com");      
  mailInfo.setMailServerPort("25");     
   mailInfo.setValidate(true);        
mailInfo.setUserName("cxf19910321@163.com");    
    mailInfo.setPassword("?");//您的邮箱密码        mailInfo.setFromAddress("cxf19910321@163.com");  
      List<String> address = new ArrayList<String>();      
  address.add("571310983@qq.com");     
   address.add("462676348@qq.com");  
      address.add("cxf19910321@163.com");       
 mailInfo.setToAddress(address);     
   mailInfo.setSubject("邮件测试案例已经发到邮箱,请查收");        
mailInfo.setContent("邮件测试案例已经发到邮箱,请查收,项目中用到了两个jar包,用的时候一并导入即可");     
   List<String> attachFileNames = new ArrayList<String>();       
 //此处是你要得到的上传附件的文件路径        
attachFileNames.add("pom.xml");   
     mailInfo.setAttachFileNames(attachFileNames);    
    //这个类主要来发送邮件       
 SimpleMailSender sms = new SimpleMailSender();   
     //sms.sendTextMail(mailInfo);
//发送文体格式     
   try {         
   //采取html格式发送        
    sms.sendHtmlMail(mailInfo);  
      } catch (UnsupportedEncodingException e) {        
    // TODO Auto-generated catch block         
   e.printStackTrace();        }
//发送html格式    }}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,358评论 6 343
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,566评论 25 707
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,014评论 11 349
  • 2017年7月17日-7月24日: “喀什的出租司机和老城的孩子们” 喀什出租司机的汉语水平都不太好,他们的汉语语...
    法语朱老师阅读 844评论 0 2