springBoot 发送邮件

1、引入依赖

        <!--邮件发送 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2、参数信息配置

#邮箱相关配置信息
spring:
  mail:
    host: smtp.qq.com
    port: 465
    username: 2423******@qq.com
    password: jngwodwc*********
    protocol: smtp
    default-encoding: UTF-8
    properties:
      mail.smtp.auth: true
      mail.smtp.starttls.enable: true
      mail.smtp.starttls.required: true
      mail.smtp.socketFactory.port: 465
      mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
      mail.smtp.socketFactory.fallback: false
      from: 2423******@qq.com

其中password 为授权码,在邮箱设置中获取

qq邮箱的host为:smtp.qq.com

163邮箱的host为:smtp.163.com

3、邮箱实体类:

public class MailVo {
    private String id;// 邮件id
    private String from;// 邮件发送人
    private String to;// 邮件接收人
    private String subject;// 邮件主题
    private String text;// 邮件内容
    private Date sentDate;// 发送时间
    private String cc; // 抄送
    private String bcc; // 密送
    private String status; // 状态
    private String error; // 报错信息
    @JsonIgnore
    private MultipartFile[] multipartFiles;// 邮件附件
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getFrom() {
        return from;
    }
    public void setFrom(String from) {
        this.from = from;
    }
    public String getTo() {
        return to;
    }
    public void setTo(String to) {
        this.to = to;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public Date getSentDate() {
        return sentDate;
    }
    public void setSentDate(Date sentDate) {
        this.sentDate = sentDate;
    }
    public String getCc() {
        return cc;
    }
    public void setCc(String cc) {
        this.cc = cc;
    }
    public String getBcc() {
        return bcc;
    }
    public void setBcc(String bcc) {
        this.bcc = bcc;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
    public MultipartFile[] getMultipartFiles() {
        return multipartFiles;
    }
    public void setMultipartFiles(MultipartFile[] multipartFiles) {
        this.multipartFiles = multipartFiles;
    }
    @Override
    public String toString() {
        return "MailVo [id=" + id + ", from=" + from + ", to=" + to + ", subject=" + subject + ", text=" + text
                + ", sentDate=" + sentDate + ", cc=" + cc + ", bcc=" + bcc + ", status=" + status + ", error=" + error
                + ", multipartFiles=" + Arrays.toString(multipartFiles) + "]";
    }
    
}

4、邮箱发送工具类

@Component
public class EmailUtils {

    @Autowired
    private JavaMailSenderImpl mailSender;//注入邮件工具类
    
    @Async
    public MailVo sendMail(MailVo mailVo) {
        try {
            checkMail(mailVo); //1.检测邮件
            sendMimeMail(mailVo); //2.发送邮件
            return saveMail(mailVo); //3.保存邮件
        } catch (Exception e) {
            mailVo.setStatus("fail");
            mailVo.setError(e.getMessage());
            //e.printStackTrace();
            return mailVo;
        }
    }
 
    //检测邮件信息类
    private void checkMail(MailVo mailVo) {
        if (StringUtils.isEmpty(mailVo.getTo())) {
            throw new RuntimeException("邮件收信人不能为空");
        }
        if (StringUtils.isEmpty(mailVo.getSubject())) {
            throw new RuntimeException("邮件主题不能为空");
        }
        if (StringUtils.isEmpty(mailVo.getText())) {
            throw new RuntimeException("邮件内容不能为空");
        }
    }
 
    // 发送邮件
    private void sendMimeMail(MailVo mailVo) {
        try {
            MimeMessage createMimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(createMimeMessage, true,"UTF-8");//true表示支持复杂类型
            String mailSendFrom = getMailSendFrom();
            mailVo.setFrom(mailSendFrom);//邮件发信人从配置项读取
            messageHelper.setFrom(mailSendFrom);//邮件发信人
            messageHelper.setTo(mailVo.getTo().split(","));//邮件收信人
            messageHelper.setSubject(mailVo.getSubject());//邮件主题
            messageHelper.setText(mailVo.getText());//邮件内容
            if (!StringUtils.isEmpty(mailVo.getCc())) {//抄送
                messageHelper.setCc(mailVo.getCc().split(","));
            }
            if (!StringUtils.isEmpty(mailVo.getBcc())) {//密送
                messageHelper.setCc(mailVo.getBcc().split(","));
            }
            if (mailVo.getMultipartFiles() != null) {//添加邮件附件
                for (MultipartFile multipartFile : mailVo.getMultipartFiles()) {
                    messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);
                }
            }
            mailVo.setSentDate(new Date());
            messageHelper.setSentDate(mailVo.getSentDate());
            
            mailSender.send(createMimeMessage);//正式发送邮件
            mailVo.setStatus("ok");
            System.out.println(mailVo.toString());
        }
        catch (Exception e) {
            throw new RuntimeException(e);//发送失败
        }
    }
    
    //保存邮件
    private MailVo saveMail(MailVo mailVo) {
        //将邮件保存到数据库..
 
        return mailVo;
    }
 
    //获取邮件发信人
    public String getMailSendFrom() {
        return mailSender.getJavaMailProperties().getProperty("from");
    }


}

邮件发送调用的方法为:  

EmailUtils.send(mailVo)
 
原文地址:https://www.cnblogs.com/luyilan/p/13967831.html