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

 更新时间:2020年04月22日 16:32:33   作者:Tlimited  
这篇文章主要为大家详细介绍了Spring框架JavaMailSender发送邮件工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

需要用到的jar包:

下面是发送工具类代码:

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<String,String> 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<String,String> 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,然后注意<img/>标签,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<InternetAddress> list = new ArrayList<InternetAddress>();// 不能使用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","706548532@qq.com","123456");
 test.setInitData("smtp.163.com","1234@163.com","1234");
 test.simpleMailSend("1326624701@qq.com","测试","测试能不能发邮件!!!");

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

 //测试发送富文本(html文件)
 /* test.setInitData("smtp.163.com","1234@163.com","1234");
 String text = "<body><p style='color:red;'>Hello Html Email</p><img src='cid:file'/></body>";
 Map<String,String> map = new HashMap<String, String>();
 map.put("file", "E:\\1f7827.jpg");
 test.richContentSend("706548532@qq.com","邮件标题",text,map);*/

 //测试群发多人多附件
 test.setInitData("smtp.163.com","1234@163.com","1234");
 String [] address = {"706548532@qq.com","1326624701@qq.com"};
 String [] filePath = {"D:\\tomcat8\\apache-tomcat-8.0.29\\test12.xls", "D:\\wsdl.rar"};
 test.sendBatchMailWithFile(address, "群发多文件", "实时", filePath);
 }

}

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

相关文章

  • java LeetCode刷题稍有难度的贪心构造算法

    java LeetCode刷题稍有难度的贪心构造算法

    这篇文章主要为大家介绍了java LeetCode刷题稍有难度的贪心构造题解示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • SpringCloud 搭建企业级开发框架之实现多租户多平台短信通知服务(微服务实战)

    SpringCloud 搭建企业级开发框架之实现多租户多平台短信通知服务(微服务实战)

    这篇文章主要介绍了SpringCloud 搭建企业级开发框架之实现多租户多平台短信通知服务,系统可以支持多家云平台提供的短信服务。这里以阿里云和腾讯云为例,集成短信通知服务,需要的朋友可以参考下
    2021-11-11
  • Java串口通信入门

    Java串口通信入门

    串口通信是一种用于在计算机和外部设备之间进行数据交换的通信方式,本文主要介绍了Java串口通信入门,并提供一个简单的示例来演示如何在Java中进行串口通信,感兴趣的可以了解一下
    2023-11-11
  • @Autowired注解在抽象类中失效的原因及解决

    @Autowired注解在抽象类中失效的原因及解决

    这篇文章主要介绍了@Autowired注解在抽象类中失效的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Spring Boot实现自动发送邮件

    Spring Boot实现自动发送邮件

    这篇文章主要为大家详细介绍了Spring Boot实现自动发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Java源码解析之GenericDeclaration详解

    Java源码解析之GenericDeclaration详解

    这篇文章主要介绍了Java源码解析之GenericDeclaration详解。有句古话说得好,源码能使人快乐!这里分享给大家,供需要的朋友参考。
    2017-10-10
  • SpringBoot项目中公共字段填充的实现

    SpringBoot项目中公共字段填充的实现

    本文主要介绍了SpringBoot项目中公共字段填充的实现,利用SpringBoot的Aop思想和自定义注解和反射机制的方法来实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • es创建索引和mapping的实例

    es创建索引和mapping的实例

    这篇文章主要介绍了es创建索引和mapping的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • springboot单文件下载和多文件压缩zip下载的实现

    springboot单文件下载和多文件压缩zip下载的实现

    这篇文章主要介绍了springboot单文件下载和多文件压缩zip下载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 在编码时如何使用\r与\n,两者的区别

    在编码时如何使用\r与\n,两者的区别

    本篇文章是对\r与\n两者的区别,以及编程语言中如何使用进行了详细的分析介绍,需要的朋友可以参考下
    2015-07-07

最新评论