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.ymlapplication.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 项目中轻松实现邮件发送功能。

相关推荐
半个落月几秒前
用 LangChain.js 手写一个能读写文件和执行命令的 Mini Cursor
javascript·人工智能·后端
liguojun202518 分钟前
篮球馆自动计时收费系统:从规则配置到自动结算的全流程拆解
java·大数据·运维·人工智能·物联网·1024程序员节
952361 小时前
RabbitMQ-基础操作
java·spring boot·分布式·后端·spring·rabbitmq
柒和远方1 小时前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构
卓怡学长1 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
C++、Java和Python的菜鸟2 小时前
第7章 Java高级技术
java·开发语言
程序员佳佳2 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
geovindu3 小时前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式
Listen·Rain3 小时前
Springboot整合Ollama实现调用本地多模型
java·spring boot·后端
霸道流氓气质3 小时前
Java 工程师 AI 智能体(Agent)完整学习路线
java·人工智能·学习