Spring框架JavaMailSender发送邮件工具类详解

本文实例为大家分享了Spring框架JavaMailSender发送邮件工具类,供大家参考,具体内容如下

需要用到的jar包:

Spring框架JavaMailSender发送邮件工具类详解_第1张图片

下面是发送工具类代码:

package com.test.email;

import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
 * @author tlimited
 * @create 2017-08-17 11:38
 **/
public class SendMailUtils {

  // Spring的邮件工具类,实现了MailSender和JavaMailSender接口
  private JavaMailSenderImpl mailSender;

  /**
   * 初始化邮件发送数据
   * @param host 服务器
   * @param username 发送人
   * @param passwd 发送人密码
   */
  public void setInitData(String host,String username,String passwd){
     //创建邮件发送服务器
    mailSender = new JavaMailSenderImpl();
    mailSender.setHost(host);
   // mailSender.setPort(465);
    mailSender.setUsername(username);
    mailSender.setPassword(passwd);
    //加认证机制
    Properties javaMailProperties = new Properties();
    javaMailProperties.put("mail.smtp.auth", true);
    javaMailProperties.put("mail.smtp.starttls.enable", true);
    javaMailProperties.put("mail.smtp.timeout", 5000);
    mailSender.setJavaMailProperties(javaMailProperties);
    System.out.println("初始化邮件发送信息完成");
  }
  /**
   * 发送普通文本
   * @param email 对方邮箱地址
   * @param subject 主题
   * @param text 邮件内容
   */
  public void simpleMailSend(String email,String subject,String text) {
    //创建邮件内容
    SimpleMailMessage message=new SimpleMailMessage();
    message.setFrom(mailSender.getUsername());
    message.setTo(email);
    message.setSubject(subject);
    message.setText(text);
    //发送邮件
    mailSender.send(message);
    System.out.println("发送成功");
  }

  /**
   * 发送附件,支持多附件
   * //使用JavaMail的MimeMessage,支付更加复杂的邮件格式和内容
    //MimeMessages为复杂邮件模板,支持文本、附件、html、图片等。
   * @param email 对方邮箱
   * @param subject 主题
   * @param text 内容
   * @param paths 附件路径,和文件名
   * @throws MessagingException
   */
  public void attachedSend(String email,String subject,String text,Map paths) throws MessagingException {

    MimeMessage message = mailSender.createMimeMessage();
    //创建MimeMessageHelper对象,处理MimeMessage的辅助类
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    //使用辅助类MimeMessage设定参数
    helper.setFrom(mailSender.getUsername());
    helper.setTo(email);
    helper.setSubject(subject);
    helper.setText(text);

    if (paths!=null){
      paths.forEach((k,v)->{
         //加载文件资源,作为附件
         FileSystemResource file = new FileSystemResource(v);
         try {
          //添加附件
           helper.addAttachment(k, file);
        } catch (Exception e) {
          e.printStackTrace();
        }
      });
    }
    //发送邮件
    mailSender.send(message);
    System.out.println("发送成功");
  }

  /**
  * 发送html文件,支持多图片
  * @param email 对方邮箱
  * @param subject 主题
  * @param text 内容
  * @param paths 富文本中添加用到的路径,一般是图片,或者css,js文件
  * @throws MessagingException
  */
  public void richContentSend(String email,String subject,String text,Map paths) throws MessagingException {

    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setFrom(mailSender.getUsername());
    helper.setTo(email);
    helper.setSubject(subject);
    //第二个参数true,表示text的内容为html,然后注意标签,src='cid:file','cid'是contentId的缩写,'file'是一个标记,
    //需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件
    helper.setText(text,true);
    //文件地址相对应src目录
    // ClassPathResource file = new ClassPathResource("logo.png");

    if (paths!=null){
      paths.forEach((k,v)->{
         //文件地址对应系统目录
         FileSystemResource file = new FileSystemResource(v);
         try {
          helper.addInline(k, file);
        } catch (Exception e) {
          e.printStackTrace();
        }
      });
    }
    mailSender.send(message);
    System.out.println("发送成功");
  }

  /**
   * 群发多人,且多附件
   * @param mailto 多人邮件地址
   * @param subject 主题
   * @param text 内容
   * @param filePath 文件路径
   * @throws Exception
   */
  public void sendBatchMailWithFile(String[] emails, String subject, String text, String[] filePath) throws Exception { 

    MimeMessage mimeMessage = mailSender.createMimeMessage(); 
    MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); 
    messageHelper.setFrom(new InternetAddress(MimeUtility.encodeText(mailSender.getUsername()))); 
    messageHelper.setSubject(subject); 
    if (filePath != null) { 
      BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象 
      mdp.setContent(text, "text/html;charset=UTF-8");// 给BodyPart对象设置内容和格式/编码方式 
      Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart对象 
      mm.addBodyPart(mdp);// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart) 
      // 把mm作为消息对象的内容 
      MimeBodyPart filePart; 
      FileDataSource filedatasource; 
      // 逐个加入附件 
      for (int j = 0; j < filePath.length; j++) { 
        filePart = new MimeBodyPart(); 
        filedatasource = new FileDataSource(filePath[j]); 
        filePart.setDataHandler(new DataHandler(filedatasource)); 
        try { 
          filePart.setFileName(MimeUtility.encodeText(filedatasource.getName())); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        } 
        mm.addBodyPart(filePart); 
      } 
      mimeMessage.setContent(mm); 
    } else { 
      messageHelper.setText(text, true); 
    } 

    List list = new ArrayList();// 不能使用string类型的类型,这样只能发送一个收件人 
    for (int i = 0; i < emails.length; i++) { 
      list.add(new InternetAddress(emails[i])); 
    } 
    InternetAddress[] address = list.toArray(new InternetAddress[list.size()]); 

    mimeMessage.setRecipients(Message.RecipientType.TO, address); 
    mimeMessage = messageHelper.getMimeMessage(); 

    mailSender.send(mimeMessage);  
    System.out.println("发送成功");
  } 


  public static void main(String[] args) throws Exception
  {
    SendMailUtils test = new SendMailUtils();
    //测试发送普通文本
   // test.setInitData("smtp.qq.com","[email protected]","123456");
    test.setInitData("smtp.163.com","[email protected]","1234");
    test.simpleMailSend("[email protected]","测试","测试能不能发邮件!!!");

    //测试发送附件
    /* test.setInitData("smtp.163.com","[email protected]","1234");
    Map map = new HashMap();
    map.put("test12.xls", "D:\\tomcat8\\apache-tomcat-8.0.29\\test12.xls");
    map.put("wsdl.rar", "D:\\wsdl.rar");
    test.attachedSend("[email protected]","Hello Attachment","This is a mail with attachment",map);
    */

    //测试发送富文本(html文件)
   /* test.setInitData("smtp.163.com","[email protected]","1234");
    String text = "

Hello Html Email

"; Map map = new HashMap(); map.put("file", "E:\\1f7827.jpg"); test.richContentSend("[email protected]","邮件标题",text,map);*/ //测试群发多人多附件 test.setInitData("smtp.163.com","[email protected]","1234"); String [] address = {"[email protected]","[email protected]"}; String [] filePath = {"D:\\tomcat8\\apache-tomcat-8.0.29\\test12.xls", "D:\\wsdl.rar"}; test.sendBatchMailWithFile(address, "群发多文件", "实时", filePath); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(Spring框架JavaMailSender发送邮件工具类详解)