无处生还
76.43M · 2026-04-23
先说结论:对于开发测试、个人项目、中小规模通知,完全免费!
我们不需要去买阿里云/腾讯云的付费邮件推送,只需要利用我们手头现有的邮箱(QQ 邮箱、163 邮箱、企业微信邮箱)开启 SMTP 服务 即可。
这是最关键的一步! 代码里填的密码绝不是你的 QQ 登录密码。
在 pom.xml 中加入官方的 Mail Starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
推荐使用 YAML 格式,结构更清晰。
YAML配置文件
spring:
mail:
# QQ邮箱服务器 (如果是企业微信则用 smtp.exmail.qq.com)
host: smtp.qq.com
# 端口号 (SSL加密端口)
port: 465
# 你的完整邮箱账号
username: 12345678@qq.com
# 刚才获取的16位授权码
password: xxxxxxxxxxxxxxxx
default-encoding: UTF-8
# 进阶配置:开启 SSL 安全连接 (必须配置,否则无法发送)
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
编写一个简单的测试类:
Java
@Autowired
private JavaMailSender mailSender;
@Test
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
// 发件人必须和配置文件里的 username 一致
message.setFrom("12345678@qq.com");
message.setTo("target@example.com");
message.setSubject("测试邮件");
message.setText("恭喜你,代码跑通了!");
mailSender.send(message);
}
发纯文本太丑了?我们利用 Java 17+ 的文本块 (Text Blocks) 特性,配合 MimeMessage,可以直接在邮件里渲染网页。
这里分享一个我模仿 Apple 官网风格写的 HTML 模板:
Java
@Test
public void sendAppleStyleMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
// 第二个参数 true 表示支持 HTML/附件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("12345678@qq.com");
helper.setTo("target@example.com");
helper.setSubject("【新品首发】iPhone 17 Pro 现已登场");
// 极简苹果风 HTML 模板
String htmlContent = """
<!DOCTYPE html>
<html>
<body style="margin:0; padding:0; background-color:#f5f5f7; font-family:'Helvetica Neue',sans-serif;">
<table width="100%" style="padding: 40px 0;">
<tr>
<td align="center">
<table width="600" style="background:#fff; border-radius:18px; overflow:hidden; box-shadow:0 4px 12px rgba(0,0,0,0.05);">
<tr>
<td align="center" style="padding:40px;">
<h1 style="color:#1d1d1f; font-size:48px; margin:0;">iPhone 17 Pro</h1>
<p style="color:#86868b; font-size:24px; margin-top:10px;">钛金属。强悍,轻盈。</p>
<img src="[]()" width="400" style="margin:30px 0;">
<br>
<a href="[]()" style="background:#0071e3; color:#fff; text-decoration:none; padding:12px 35px; border-radius:980px; display:inline-block;">
立即购买 >
</a>
</td>
</tr>
</table>
<p style="color:#86868b; font-size:12px; margin-top:20px;">Copyright © 2026 Apple Inc.</p>
</td>
</tr>
</table>
</body>
</html>
""";
helper.setText(htmlContent, true); // true 代表是 HTML
mailSender.send(mimeMessage);
}
收件结果
效果展示: 收到邮件的那一刻,简直像真的苹果官方广告一样!
在开发过程中,我遇到了两个最经典的报错,帮大家避坑:
1. 报错:535 Login fail
原因:登录失败。
排查:
password 填的是不是QQ密码?(必须是授权码!)2. 报错:501 Mail from address must be same as authorization user
message.setFrom("xxx") 必须和配置文件里的 username 完全一致。不能配置文件写A,代码里冒充B去发邮件。Spring Boot 整合邮件发送非常简单,只要搞定了 SMTP 授权码,剩下的就是拼凑 HTML 的工作了。对于个人开发者来说,这是一个不需要花钱就能极大提升项目“毕格”的小功能,强烈推荐大家动手试试!