SpringBoot中快速实现邮箱发送代码解析

 更新时间:2019年08月24日 08:40:07   作者:SimpleWu  
这篇文章主要介绍了SpringBoot中快速实现邮箱发送代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

在许多企业级项目中,需要用到邮件发送的功能,如:

  • 注册用户时需要邮箱发送验证
  • 用户生日时发送邮件通知祝贺
  • 发送邮件给用户等

创建工程导入依赖

<!-- 邮箱发送依赖 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 小火龙代码简化 -->
<dependency>
  <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
  <version>1.18.8</version>
</dependency>

本工程依赖于SpringBoot,是基于SpringBoot再次对邮箱发送进行了一次封装。

创建Application.properties

# JavaMailSender 邮件发送的配置
spring.mail.host=smtp.qq.com
spring.mail.username=lovelyWu98k@qq.com
#授权码
spring.mail.password=
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8

封装邮箱发送工具类

创建邮箱信息实体类,如下:

/**
 * 邮件信息实体
 *
 * @author:伍梓涛
 * @version:1.0.0
 * @Modified By:SimpleWu
 * @CopyRright (c)2019-:YUM架构平台
 */
@Data
public class MailEntity {
  private String to; //收件人
  private String subject;//标题
  private String text;//正文
  private boolean isHtml = false;//是否html邮件
  private List<String> files;//附件地址
  private Date sentDate;//发送时间

}

创建邮箱信息实体类工具,快捷创建邮件信息

/**
 * 邮箱发送信息统一处理封装
 *
 * @author:伍梓涛
 * @version:1.0.0
 * @Modified By:SimpleWu
 * @CopyRright (c)2019-:YUM架构平台
 */
@Slf4j
public class MailEntityHelper {


  public static MimeMessageHelper craeteMessageHelper(MimeMessage mimeMessage, MailEntity mailBean) throws MessagingException {

    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
    // mimeMessageHelper.setFrom(emailSender);//发件人
    mimeMessageHelper.setTo(mailBean.getTo());//收件人
    mimeMessageHelper.setSubject(mailBean.getSubject());//标题
    mimeMessageHelper.setText(mailBean.getText(), mailBean.isHtml());//是否html
    mimeMessageHelper.setSentDate(mailBean.getSentDate() == null ? new Date() : mailBean.getSentDate());// 客户端邮箱发送时间
    if (mailBean.getFiles() != null && mailBean.getFiles().size() > 0) {
      //附件添加
      mailBean.getFiles().forEach(filename -> {
        String ext = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
        File diskfile = new File(filename);
        try {
          mimeMessageHelper.addAttachment(diskfile.getName(), diskfile);
        } catch (MessagingException e) {
          e.printStackTrace();
          log.error("设置附件失败:{}", mailBean);
        }
      });
    }
    return mimeMessageHelper;
  }

}

创建邮箱发送工具类,进行邮箱发送:

/**
 * 邮箱发送工具类
 *
 * @author:伍梓涛
 * @version:1.0.0
 * @Modified By:SimpleWu
 * @CopyRright (c)2019-:YUM架构平台
 */
@Component
@Slf4j
public class MailHelper {


  @Autowired
  private JavaMailSender javaMailSender;

  @Value("${spring.mail.username}")
  private String emailSender;

  private static MailHelper mailHelper;

  public MailHelper() {
    mailHelper = this;
  }

  /**
   * 构建静态获取实例
   *
   * @return
   */
  public static MailHelper buidler() {
    if (mailHelper == null) {
      return null;
    }
    return mailHelper;
  }

  /*public void sendSimpleMail(EmailContextPojo mailBean) {
    try {
      SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
      //邮件发送人
      simpleMailMessage.setFrom(emailSender);
      //邮件接收人
      simpleMailMessage.setTo(mailBean.getTo());
      //邮件主题
      simpleMailMessage.setSubject(mailBean.getSubject());
      //邮件内容
      simpleMailMessage.setText(mailBean.getText());
      javaMailSender.send(simpleMailMessage);
    } catch (Exception e) {
      e.printStackTrace();
      log.error("邮件发送失败", e.getMessage());
    }
  }*/


  public void sendMail(MailEntity mailBean) {
    MimeMessage mimeMailMessage = null;
    try {
      mimeMailMessage = javaMailSender.createMimeMessage();
      MimeMessageHelper mimeMessageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBean);
      mimeMessageHelper.setFrom(emailSender);//发件人
      javaMailSender.send(mimeMailMessage);
    } catch (Exception e) {
      log.error("邮件发送失败", e.getMessage());
    }
  }


  public void sendMail(MailEntity... mailBeans) {
    //批量发送集合
    List<MimeMessage> mimeMessages = new ArrayList<>(mailBeans.length);
    try {
      if (mailBeans != null || mailBeans.length > 0) {
        for (int i = 0; i < mailBeans.length; i++) {
          MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
          MimeMessageHelper messageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBeans[i]);
          messageHelper.setFrom(emailSender);//发件人
          mimeMessages.add(mimeMailMessage);
        }
      }

      MimeMessage[] resultMessage = new MimeMessage[mimeMessages.size()];
      mimeMessages.toArray(resultMessage);
      javaMailSender.send((resultMessage));
    } catch (Exception e) {
      log.error("邮件发送失败", e.getMessage());
    }
  }

}

在之前通过邮箱发送信息统一处理的工具类,对邮件信息实体进行封装后,这里就只需要传入对象参数即可。由于在这里使用的是SpringBoot已经封装好的,由于我们要把它当成工具类使用,每次需要注入并不方便。

所在在类中加了个静态对象,在Spring 容器实例化的时候给他初始化直接赋值给javaMailSender并且通过buidler()可以静态获取到实例对象,但是这样如果被重新创建对象后就会产生问题,所以最好在工具类中使用Spring 容器去获取 javaMailSender即可 。

发送邮件

1.发送普通邮件

 MailEntity emailContextPojo = new MailEntity();
 emailContextPojo.setSubject("Ycloud 邮箱标题");
 emailContextPojo.setText("Ycloud 邮箱正文");
 emailContextPojo.setTo(" 接收邮箱号 ");
 MailHelper.buidler().sendMail(emailContextPojo);

2.发送Html邮件

 emailContextPojo.setHtml(true);

只需要将信息实体类设置成true即可。

3.发送附件

emailContextPojo.setFiles(Arrays.asList("D:\\Yum系统架构平台\\004.高系统部署\\004.PXC\\部署手册.docx"));

只需要增加附件路径即可。

注: 请勿直接在项目中使用邮箱发送

本文代码案例: https://github.com/450255266/open-doubi/tree/master/SpringBoot/email

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

相关文章

  • Spring 代理 Bean 获取不到原始 Bean 对象注解解决方法

    Spring 代理 Bean 获取不到原始 Bean 对象注解解决方法

    这篇文章主要介绍了Spring 代理 Bean 获取不到原始 Bean 对象注解解决方法,文章围绕主题相关资料展开详细介绍,需要的小伙伴可以参考一下
    2022-04-04
  • mybatis解决<foreach>标签不能超过1000的问题

    mybatis解决<foreach>标签不能超过1000的问题

    MyBatis是一个开源的持久层框架,它可以帮助开发者简化数据库操作的编写,而foreach是MyBatis中的一个重要标签,用于在SQL语句中进行循环操作,本文主要给大家介绍了mybatis解决<foreach>标签不能超过1000的问题,需要的朋友可以参考下
    2024-05-05
  • eclipse修改maven仓库位置的方法实现

    eclipse修改maven仓库位置的方法实现

    本文主要介绍了eclipse修改maven仓库位置的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java 实战项目之疫情防控管理系统详解

    Java 实战项目之疫情防控管理系统详解

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个疫情防控管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • 解决java.util.HashMap$Values cannot be cast to java.ut的问题

    解决java.util.HashMap$Values cannot be cast to java.ut的问题

    这篇文章主要介绍了解决java.util.HashMap$Values cannot be cast to java.ut的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • RabbitMQ实现延时消息的两种方法实战教程

    RabbitMQ实现延时消息的两种方法实战教程

    这篇文章主要介绍了RabbitMQ实现延时消息的两种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Spring Boot2.0实现静态资源版本控制详解

    Spring Boot2.0实现静态资源版本控制详解

    这篇文章主要给大家介绍了关于Spring Boot2.0实现静态资源版本控制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 关于mybatis3中@SelectProvider的使用问题

    关于mybatis3中@SelectProvider的使用问题

    这篇文章主要介绍了mybatis3中@SelectProvider的使用技巧,@SelectProvide指定一个Class及其方法,并且通过调用Class上的这个方法来获得sql语句,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • 详解Java集合类之List篇

    详解Java集合类之List篇

    这篇文章主要为大家详细介绍一下Java集合类中List的用法,文中的示例代码讲解详细,对我们学习Java有一定帮助,感兴趣的可以了解一下
    2022-07-07
  • Mybatis-Plus将字段设置为null解决方法

    Mybatis-Plus将字段设置为null解决方法

    MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增 强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于Mybatis-Plus将字段设置为null的解决方法的相关资料,需要的朋友可以参考下
    2023-04-04

最新评论