Cao Yi

在 Spring Boot 中使用 QQ 邮箱发送邮件

Index

本文演示如何在 Spring Boot 项目中使用 QQ 邮箱发送邮件。

1. QQ 邮箱设置

登录 QQ 邮箱网页版,进入【设置】-【账号与安全】-【安全设置】,开启 SMTP 服务并生成授权码。请记住这个授权码,后面的程序会用到。

假设本文用到的授权码是: d67fe079485k

2. 创建项目

Spring Initializr 中选择 Java Mail Sender 创建工程即可。本实验只做最简单的演示,所以只选这个就行了。

生成项目 POM 文件中会包含如下内容:

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

代码

application.properties

spring.application.name=mail
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=yourname@qq.com
spring.mail.password=d67fe079485k
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.ssl.protocols=TLSv1.2

这里需要注意:

新增 Service:

package com.example.mail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;

@Service
public class MailService {
    @Value("${spring.mail.username}")
    private String fromAddress;

    @Autowired
    private MailSender mailSender;

    public String sendMail(String toAddress, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(fromAddress);
        message.setTo(toAddress);
        message.setSubject(subject);
        message.setText(content);
        
        try {
            mailSender.send(message);
        } catch (MailException e) {
            e.printStackTrace();
            return "failure";
        }
        return "success";
    }
}

新增测试类:

package com.example.mail;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
class MailApplicationTests {
    @Autowired
    MailService mailService;

	@Test
	void testSendMail() {
        String sendTo = "caoxiansheng@qq.com";
        String subject = "@@@Test@@@";
        String content = "Hello World!";
        String result = mailService.sendMail(sendTo, subject, content);
        assertEquals("success", result);
    }
}

3. 测试

运行以下 maven 命令测试发送邮件功能:

mvn clean compile test

测试运行完成后,登录收件邮箱 caoxiansheng@qq.com,如果能看到新邮件,则实验成功。如果测试失败,请检查日志或常见问题: