在项目中,很多地方要用到邮件通知功能,通过邮件注册,通过邮件找回密码,系统有问题邮件通知,到期通知,等等。

在springboot中,要实现邮件通知功能其实很简单,根本不需要额外去引包,引依赖。springboot本身就能快速地实现一个发送邮件的功能。

几行代码就搞定,下面我们看看具体实现。

1、application.yml配置

spring:
  #邮箱基本配置
  mail:
    #配置smtp服务主机地址
    # 我这里用的是阿里的企业邮箱
    # qq邮箱为:smtp.qq.com
    # sina邮箱为:smtp.sina.cn
    # 163邮箱为:smtp.163.com
    host: smtp.mxhichina.com
    #发送者邮箱
    username: postmaster@gzyuhe.com
    #配置密码,密码或授权码
    password: bnqolmfkahdgwyaiyz
    #端口号465或587
    port: 465
    #默认的邮件编码为UTF-8
    default-encoding: UTF-8
    #其他参数
    properties:
     mail:
      #配置SSL 加密工厂
      smtp:
        ssl:
          enable: true
          required: false
        #开启debug模式,方便看日志排查错误
      debug: true

2、编写发送邮件方法

/**
 * 注入邮件发送类
 */
@Autowired
private JavaMailSenderImpl javaMailSender;

/**
 * 邮件发送人取配置文件里的username
 */
@Value("${spring.mail.username}")
private String sendMailer;

/**
   * 发送邮件
   * @param to 收件人,多个;隔开
   * @param subject 邮件主题
   * @param text 邮件内容
   */
  public void sendMail(String to, String subject, String text) {

    //检测邮件信息
    checkMail(to, subject, text);
    try {
      //true 代表支持复杂的类型
      MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(
          javaMailSender.createMimeMessage(), true);
      //邮件发信人
      mimeMessageHelper.setFrom(sendMailer);
      //邮件收信人 1或多个
      mimeMessageHelper.setTo(to.split(";"));
      //邮件主题
      mimeMessageHelper.setSubject(subject);
      //邮件内容
      mimeMessageHelper.setText(text);
      //邮件发送时间
      mimeMessageHelper.setSentDate(new Date());
      //发送邮件
      javaMailSender.send(mimeMessageHelper.getMimeMessage());
    }
    catch (MessagingException e) {
      log.error("", e);
      throw new RuntimeException(e);
    }
  }

3、完整工具类

import java.util.Date;

import javax.mail.MessagingException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class MailUtil {

    /**
     * 注入邮件发送类
     */
    @Autowired
    private JavaMailSenderImpl javaMailSender;

    /**
     * 邮件发送人取配置文件里的username
     */
    @Value("${spring.mail.username}")
    private String sendMailer;

    /**
     * 发送邮件
     * @param to 收件人,多个;隔开
     * @param subject 邮件主题
     * @param text 邮件内容
     */
    public void sendMail(String to, String subject, String text) {

       //检测邮件信息
       checkMail(to, subject, text);

       try {
          //true 代表支持复杂的类型
          MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(
                javaMailSender.createMimeMessage(), true);
          //邮件发信人
          mimeMessageHelper.setFrom(sendMailer);
          //邮件收信人  1或多个
          mimeMessageHelper.setTo(to.split(";"));
          //邮件主题
          mimeMessageHelper.setSubject(subject);
          //邮件内容
          mimeMessageHelper.setText(text);
          //邮件发送时间
          mimeMessageHelper.setSentDate(new Date());
          //发送邮件
          javaMailSender.send(mimeMessageHelper.getMimeMessage());
       }
       catch (MessagingException e) {
          log.error("", e);
          throw new RuntimeException(e);
       }
    }

    /**
     * 检测邮件信息
     * @param to 收件人,多个;隔开
     * @param subject 邮件主题
     * @param text 邮件内容
     */
    private void checkMail(String to, String subject, String text) {

       if (StringUtils.isEmpty(to)) {
          throw new RuntimeException("邮件收信人不能为空");
       }
       if (StringUtils.isEmpty(subject)) {
          throw new RuntimeException("邮件主题不能为空");
       }
       if (StringUtils.isEmpty(text)) {
          throw new RuntimeException("邮件内容不能为空");
       }
    }
}

4、调用

/**
 * 先注入邮件工具类
 */
@Autowired
private MailUtil mailUtil;

//调用方法发送邮件
mailUtil.sendMail("123456789@qq.com", "测试邮件主题","测试邮件内容");

完事,搞定收工。

作者 admin

发表评论

您的电子邮箱地址不会被公开。