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

Spring Boot中如何配置带RelayHost的Java Mail API邮件属性

Spring Boot 配置RelayHost邮件发送的问题解决指南

咱们一步步拆解你的问题,帮你搞定Spring Boot里RelayHost的邮件配置问题。

先解决最紧急的异常:UnknownHostException

你贴的异常里核心问题是java.net.UnknownHostException: [RelayHost.SMTP.server.provided.by.network.dept]:30,这说明你的应用根本找不到这个中继服务器的地址,大概率是配置写错了:

  • 你是不是把配置里的占位符方括号也保留下来了?实际配置里spring.mail.host应该直接写真实的主机名,比如spring.mail.host=RelayHost.SMTP.server.provided.by.network.dept,不要带[]。
  • 端口30非常罕见,常用的SMTP中继端口是25、587,先确认网络部门给的端口是否正确。
  • 先在你的应用服务器上测试连通性:用ping RelayHost.SMTP.server.provided.by.network.dept看能不能解析到IP,再用telnet RelayHost.SMTP.server.provided.by.network.dept 端口号测试能不能建立连接。如果连不通,先找网络部门排查DNS或防火墙问题。

RelayHost到底要不要用户名密码?

开放邮件中继确实允许无认证发送,但现在企业里几乎不会用完全开放的中继,一般会做两种限制:

  1. IP白名单:只有来自指定IP段的请求(比如你的应用服务器IP)才能免认证发送。如果你的应用IP不在白名单里,服务器就会要求认证,这时候你移除用户名密码就会报认证失败。
  2. 强制认证:有些内部中继也要求提供专属的用户名密码,哪怕是内部网络访问。

所以你得先联系网络部门确认:这个RelayHost是靠IP白名单免认证,还是需要专门的账号密码?

对应两种情况的Spring Boot配置示例

情况1:RelayHost靠IP白名单免认证(开放中继模式)

这种情况下要关闭SMTP认证,同时根据中继服务器的要求配置TLS/SSL:

# 基础配置:替换成真实的主机和端口
spring.mail.host=你的RelayHost真实地址
spring.mail.port=网络部门确认的正确端口(比如25)

# 关闭认证
spring.mail.properties.mail.smtp.auth=false

# 大部分内部中继端口25不需要SSL/TLS,按需调整
spring.mail.properties.mail.smtp.starttls.enable=false
spring.mail.properties.mail.smtp.ssl.enable=false

# 超时配置保留
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.writetimeout=5000

情况2:RelayHost需要用户名密码认证

如果网络部门确认需要账号,就打开认证并添加账号信息:

# 基础配置
spring.mail.host=你的RelayHost真实地址
spring.mail.port=对应端口(比如587)
spring.mail.username=中继服务器提供的用户名
spring.mail.password=中继服务器提供的密码

# 开启认证
spring.mail.properties.mail.smtp.auth=true
# 如果服务器要求STARTTLS加密,就打开这个(端口587常用)
spring.mail.properties.mail.smtp.starttls.enable=true
# 端口465才需要开启ssl.enable=true,587一般用STARTTLS即可
spring.mail.properties.mail.smtp.ssl.enable=false

# 超时配置
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.writetimeout=5000

额外排查建议

  • 解决完UnknownHostException后,如果还是有问题,先写一个简单的测试方法直接调用JavaMailSender发送邮件,缩小排查范围。
  • 如果是IP白名单问题,让网络部门把你的应用服务器IP加入RelayHost的允许列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:10