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

Spring Boot Starter Mail发送邮件遇SMTP连接异常及超时问题求助

Spring Boot Starter Mail 发送邮件连接失败问题排查与解决

配置信息(application.properties)

email.username=sender@me.us <== 用于“FROM”字段
spring.mail.host=mail.4da.us <== 不确定是否需要?
spring.mail.port=465
spring.mail.username=sender@me.us
spring.mail.password=<我的登录密码>
spring.mail.properties.mail.transport.protocol=smtp
spring.mail.properties.mail.host=mail.4da.us
spring.mail.properties.mail.smtp.port=465
spring.mail.properties.mail.smtp.auth=true

邮件发送代码

import org.springframework.mail.javamail.JavaMailSender;
@Autowired
private JavaMailSender javaMailSender;
...
try {
  SimpleMailMessage mailMessage = new SimpleMailMessage();
  // 设置必要信息
  mailMessage.setFrom(EMAIL_USERNAME);
  mailMessage.setReplyTo(EMAIL_USERNAME);
  mailMessage.setSentDate(new Date());
  mailMessage.setTo(emailRequest.getEmailAddress());
  mailMessage.setText(buildMessage(emailRequest));
  mailMessage.setSubject(SUBJECT);

  // 发送邮件
  logger.info("发送邮件 {}", mailMessage);
  javaMailSender.send(mailMessage);

catch (Exception e) {
            logger.error("邮件发送失败。错误信息: " + e.getMessage());
}
...

异常信息

首次触发的异常:

邮件发送失败。错误信息: 邮件服务器连接失败;
嵌套异常为javax.mail.MessagingException: 从SMTP主机mail.4da.us(端口465)收到无效问候,响应: [EOF]。发送失败的消息: javax.mail.MessagingException: 从SMTP主机mail.4da.us(端口465)收到无效问候,响应: [EOF]

添加超时配置后触发的异常:

邮件发送失败。错误信息: 邮件服务器连接失败;
嵌套异常为javax.mail.MessagingException: 读取响应时出现异常; 嵌套异常为: java.net.SocketTimeoutException: 读取超时。发送失败的消息: javax.mail.MessagingException: 读取响应时出现异常;

已完成的排查动作

  • 与托管服务商确认配置无误,该邮箱账号可在本地正常收发邮件
  • 尝试在SMTP地址前添加smtp前缀,提示地址未找到
  • 通过telnet测试端口连通性,结果正常:
    telnet mail.4da.us 465
    

    正在尝试35.215.124.126... 已连接到mail.4da.us。转义字符为'^]'。

解决方案建议

1. 启用SSL加密(端口465强制要求)

端口465是SMTP over SSL的默认端口,当前配置缺少SSL相关参数,导致连接后无法完成握手,进而出现EOF或超时错误。添加以下配置:

spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.ssl.trust=mail.4da.us

2. 简化配置,避免重复设置冲突

spring.mail.host和spring.mail.port属于Spring Boot顶层配置,会覆盖spring.mail.properties下的对应重复项。建议简化配置如下:

email.username=sender@me.us
spring.mail.host=mail.4da.us
spring.mail.port=465
spring.mail.username=sender@me.us
spring.mail.password=<你的登录密码>
spring.mail.properties.mail.transport.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.ssl.trust=mail.4da.us
# 可选超时配置
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000

3. 验证发件人地址与SMTP账号一致性

确保mailMessage.setFrom()使用的地址和spring.mail.username完全匹配,部分邮件服务器会严格验证发件人地址与登录账号的一致性。

4. 排查应用环境的网络限制

虽然telnet能连通,但Java应用可能受限于容器防火墙、公司网络代理等限制,需确认应用所在环境允许465端口的SSL出站连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:07:09