java-给多人发送邮件

字数 33阅读 250

依赖的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格式    }}

推荐阅读更多精彩内容