使用spring boot实现发送邮件功能

使用spring boot实现发送邮件功能

一、引入依赖以及基本配置

首先,在pom.xml文件中引入spring boot提供的mail依赖。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

接着,在application.yml中进行设置(在配置中注意缩进格式)

spring:
  mail:
    host: smtp.qq.com
    username: 你的qq邮箱
    password: qq邮箱的授权码

这里使用qq邮箱来进行测试,其中,username中填写自己的qq邮箱号,password填写qq邮箱的授权码。注意:授权码不是qq邮箱的密码,需要在打开自己的qq邮箱,找到“设置”里的“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 ”,接着开启“POP3/SMTP服务 ”,得到相应的授权码。

使用spring boot实现发送邮件功能

二、编写发送邮件的程序和对应的测试类

邮件发送类MailService

package com.silver.springboot.service;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

/**
 * 测试邮件发送功能
 */
@Slf4j
@Service
public class SendMail {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender javaMailSender;

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

    /**
     * 发送纯文本邮件
     * @param to            邮件接收方
     * @param subject       邮件主题
     * @param text          邮件内容
     */
    public void sendTextMail(String to,String subject,String text){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(text);

        try{
            javaMailSender.send(simpleMailMessage);
            logger.info("邮件已发送。");
        }catch (Exception e){
            logger.error("邮件发送失败。" + e.getMessage());
        }
    }

    /**
     * 发送带附件的邮件
     * @param to            邮件接收方
     * @param subject       邮件主题
     * @param text          邮件内容
     * @param path          附件所在的文件路径
     */
    public void sendAttachmentMail(String to,String subject,String text,String path){
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();

        try{
            // 创建一个multipart格式的message
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
            messageHelper.setFrom(from);
            messageHelper.setTo(to);
            messageHelper.setSubject(subject);
            messageHelper.setText(text,true);
            // 添加附件信息
            FileSystemResource file = new FileSystemResource(new File(path));
            String fileName = path.substring(path.lastIndexOf(File.separator));
            messageHelper.addAttachment(fileName,file);
            // 发送带附件的邮件
            javaMailSender.send(mimeMessage);
            logger.info("邮件发送成功");
        }catch (Exception e){
            logger.error("带有附件的邮件发送失败。" + e.getMessage());
        }
    }
}

测试类

package com.silver.springboot.service;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class SendMailTest {
    @Autowired
    private SendMail mailService;
    private String toEmail = "[email protected]";		// 填写你的qq邮箱号

    @Test
    public void sendTextMail() {
        mailService.sendTextMail(toEmail,"主题","测试内容");
    }
    
    @Test
    public void sendAttachmentMail() {
        mailService.sendAttachmentMail(toEmail,"这是带附件的邮件","有附件","D:\\笔记整理\\使用spring boot实现发送邮件功能.md");
    }
}

运行测试类,可以在自己的qq邮箱收到相应的邮件。

参考:
https://blog.****.net/yshuailong/article/details/83378868