Spring Boot 集成 JavaMail 163邮箱配置详解

Spring Boot 集成 JavaMail 发送邮件 - 163邮箱配置详解

在实际项目开发中,邮件发送是一个常见的功能需求,比如用户注册验证码、订单通知、密码重置等场景。Spring Boot 提供了 spring-boot-starter-mail 来简化邮件发送的开发。本文将详细介绍如何在 Spring Boot 中配置 163 邮箱发送邮件。

环境准备

  • Spring Boot 2.x 或 3.x
  • Java 8+
  • 163 邮箱账号(需要开启 SMTP 服务)

1. 添加 Maven 依赖

在 pom.xml 中添加邮件 starter 依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2. 配置 163 邮箱

2.1 开启 SMTP 服务

登录 163 邮箱,进入「设置」→「POP3/SMTP/IMAP」,开启 SMTP 服务。

注意:163 邮箱需要设置授权码,而非登录密码。

2.2 配置文件

在 application.yml 或 application.properties 中配置:

application.yml 配置:

yaml 复制代码
spring:
  mail:
    host: smtp.163.com
    port: 465
    username: your-email@163.com
    password: your-authorization-code
    protocol: smtp
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
          ssl:
            enable: true
            trust: smtp.163.com

application.properties 配置:

properties 复制代码
spring.mail.host=smtp.163.com
spring.mail.port=465
spring.mail.username=your-email@163.com
spring.mail.password=your-authorization-code
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.163.com

2.3 配置说明

配置项 说明
host 163 邮箱 SMTP 服务器地址
port 465(SSL 端口)或 587(TLS 端口)
username 你的 163 邮箱地址
password 163 邮箱授权码(不是登录密码)
protocol 邮件协议,通常为 smtp

3. 注入 JavaMailSender

Spring Boot 会自动配置 JavaMailSender,直接注入使用即可:

java 复制代码
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MailService {

    @Autowired
    private JavaMailSender mailSender;

    public void sendSimpleMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("your-email@163.com");  // 发件人
        message.setTo("recipient@example.com"); // 收件人
        message.setSubject("测试邮件");          // 主题
        message.setText("这是一封测试邮件");       // 内容
        
        mailSender.send(message);
    }
}

4. 发送 HTML 邮件

SimpleMailMessage 只支持纯文本,如果需要发送 HTML 格式的邮件,使用 MimeMessageHelper:

java 复制代码
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

public void sendHtmlMail() throws MessagingException {
    MimeMessage mimeMessage = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
    
    helper.setFrom("your-email@163.com");
    helper.setTo("recipient@example.com");
    helper.setSubject("HTML 邮件测试");
    
    // 设置 HTML 内容
    String htmlContent = "<h1>标题</h1><p>这是一封 <b>HTML</b> 邮件</p>";
    helper.setText(htmlContent, true);
    
    mailSender.send(mimeMessage);
}

5. 发送带附件的邮件

java 复制代码
public void sendAttachmentMail() throws MessagingException, IOException {
    MimeMessage mimeMessage = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
    
    helper.setFrom("your-email@163.com");
    helper.setTo("recipient@example.com");
    helper.setSubject("带附件的邮件");
    helper.setText("请查收附件");
    
    // 添加附件
    File file = new File("path/to/file.pdf");
    helper.addAttachment("file.pdf", file);
    
    mailSender.send(mimeMessage);
}

6. 常见问题排查

6.1 认证失败

  • 检查是否使用了正确的授权码(不是登录密码)
  • 确认 SMTP 服务已在邮箱设置中开启

6.2 连接超时

  • 检查防火墙是否阻止了 SMTP 端口
  • 确认网络能否访问 smtp.163.com

6.3 SSL 证书问题

  • 确保配置了正确的 SSL 参数
  • 163 邮箱推荐使用 465 端口(SSL)或 587 端口(TLS)

7. 完整示例

创建一个简单的 Spring Boot 项目,完整配置如下:

java 复制代码
// MailService.java
@Service
@Slf4j
public class MailService {

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

    @Autowired
    private JavaMailSender mailSender;

    public void sendSimpleMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        
        try {
            mailSender.send(message);
            log.info("邮件发送成功: {}", to);
        } catch (Exception e) {
            log.error("邮件发送失败: {}", e.getMessage());
        }
    }
}

总结

本文详细介绍了 Spring Boot 集成 JavaMail 配置 163 邮箱的完整步骤,包括:

  1. 添加 Maven 依赖
  2. 配置 163 邮箱 SMTP 参数
  3. 发送简单邮件、HTML 邮件和带附件的邮件
  4. 常见问题排查

通过以上配置,即可在 Spring Boot 项目中轻松实现邮件发送功能。

相关推荐
沙蒿同学2 分钟前
Wails v3 实战:一个桌面提醒客户端,从 v2 升到 v3 的全过程
前端·后端·github
aibo8603087 分钟前
基于 Spring Boot + Vue3 的爱心众筹管理系统设计与实现
java·spring boot·后端
SimonKing8 分钟前
OpenCode免费模型直接给`Workbuddy`用,一键导入
java·后端·程序员
Tsuki_tl10 分钟前
【优选算法:双指针】——复写零题解
java·c++·算法·leetcode·数组·双指针·复写零
我命由我1234511 分钟前
Python 开发 - Python 项目部署(Windows 与 Linux)
java·linux·windows·后端·python·java-ee·python3.11
小羊没烦恼!16 分钟前
TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
java·linux·运维·服务器·开发语言·数据库·mysql
inquisiter21 分钟前
KernelGpt的部分尝试
java·前端·apache
aibo86030823 分钟前
基于 Spring Boot + Vue3 的餐饮食材采购与成本分析系统设计与实现
java·spring boot·后端
Geek-Chow25 分钟前
Spring Boot: Integrating Swagger / OpenAPI With springdoc-openapi
java
Rain的Java大神之路28 分钟前
面了上百人,我最爱问的LeetCode 1「两数之和」:能背代码的很多,能讲清“先查后存”的没几个
java·后端·算法