You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot JavaMailSender配置异常:设587仍用25端口报错

问题分析与解决方案

为什么会连接localhost:25?

核心原因是你的SMTP配置未生效,SpringBoot默认启用了本地SMTP服务(localhost:25)的自动配置,常见触发场景包括:

  • 配置项拼写错误,导致Spring无法读取Office365的配置参数
  • 自定义的JavaMailSenderImpl Bean未被Spring正确扫描加载,或存在多个JavaMailSender实例导致优先级冲突
  • 邮件依赖缺失或版本不兼容,引发自动配置逻辑异常

端口25不可用的常见原因

  • 云服务商封禁:阿里云、AWS、腾讯云等主流云主机普遍封禁25端口,用于遏制垃圾邮件发送,云服务器环境下localhost:25必然无法连接
  • 本地无SMTP服务:默认状态下Windows、Linux系统不会启动本地SMTP服务,localhost:25无进程监听,连接直接被拒绝
  • 防火墙拦截:本地防火墙或杀毒软件可能拦截25端口的出站请求

解决步骤:强制使用587端口发送邮件

1. 确保application.properties配置完整正确

Office365的SMTP配置必须包含以下关键项,检查无拼写错误:

# Office365 SMTP核心配置
spring.mail.host=smtp.office365.com
spring.mail.port=587
spring.mail.username=你的Office365/Outlook邮箱(如xxx@outlook.com)
spring.mail.password=你的应用专用密码(注:开启两步验证后,不能用登录密码,需在微软账户中生成应用密码)
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.debug=true

2. 确保自定义JavaMailSenderImpl Bean生效

如果手动配置Bean,需保证Bean被Spring扫描到,逻辑无错误:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.Properties;

@Configuration
public class MailConfig {

    @Bean
    public JavaMailSenderImpl javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.office365.com");
        mailSender.setPort(587);
        mailSender.setUsername("你的邮箱地址");
        mailSender.setPassword("你的应用专用密码");

        Properties props = mailSender.getJavaMailProperties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.starttls.required", "true");
        props.put("mail.debug", "true");

        return mailSender;
    }
}

注意:

  • 配置类需放在SpringBoot主应用类的同包或子包下,或通过@ComponentScan指定扫描路径
  • 注入时直接使用@Autowired JavaMailSender mailSender,Spring会优先加载你自定义的Bean

3. 排查依赖问题

确保项目引入SpringBoot邮件启动器依赖:

Maven

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

Gradle

implementation 'org.springframework.boot:spring-boot-starter-mail'

4. 验证配置生效

开启mail.debug=true后,启动项目发送邮件,查看控制台日志:

  • 若日志显示连接smtp.office365.com:587,说明配置生效
  • 若仍显示localhost:25,检查是否存在其他JavaMailSender Bean,或配置项是否被其他环境配置文件(如application-dev.properties)覆盖

内容的提问来源于stack exchange,提问作者mjCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:25:28