欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-10-10 19:41:25
前言 在许多企业级项目中,需要用到邮件发送的功能,如: 注册用户时需要邮箱发送验证 用户生日时发送邮件通知祝贺 发送邮件给用户等 创建工程...

前言

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

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

创建工程导入依赖

<!-- 邮箱发送依赖 -->
<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

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