Windows Server应用使用Java Mail连接Office365 SMTP遇异常求助
问题描述
我们部署在云平台Windows Server上的应用,使用Java Mail连接Office365 Exchange服务器发送邮件时出现以下异常:
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Unknown SMTP host: smtp.office365.com; nested exception is: java.net.UnknownHostException: smtp.office365.com. Failed messages: javax.mail.MessagingException: Unknown SMTP host: smtp.office365.com; nested exception is: java.net.UnknownHostException: smtp.office365.com; message exception details (1) are: Failed message 1: javax.mail.MessagingException: Unknown SMTP host: smtp.office365.com; nested exception is: java.net.UnknownHostException: smtp.office365.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1959) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654) at javax.mail.Service.connect(Service.java:295) at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:518) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:437) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:361) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:356) at com.grc.jframework.mail.FailsafeMailSender.sendInternal(FailsafeMailSender.java:146) at com.grc.jframework.mail.FailsafeMailSender.lambda$init$0(FailsafeMailSender.java:115) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.net.UnknownHostException: smtp.office365.com at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:321) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927) ... 11 more
该应用的Exchange服务器配置在Windows 11个人电脑及其他云厂商的Windows Server上均可正常运行,请问是否需要修改当前Windows Server端的配置?
SMTP服务器配置详情
smtp.sender.main.port= 587smtp.sender.reserve.auth_type= ANONYMOUSsmtp.sender.main.auth_type= TLSsmtp.sender.main.host= smtp.office365.comsmtp.sender.reserve.port= 25smtp.sender.main.timeout_sec= 90
分析与解决方案
异常核心是java.net.UnknownHostException: smtp.office365.com,说明当前Windows Server无法解析该域名,和SMTP配置本身无关(其他环境同配置可正常运行),需要修改当前服务器的网络相关配置,具体操作如下:
1. 修复DNS解析问题
- 打开命令提示符(CMD),执行
nslookup smtp.office365.com:- 若提示无法找到主机,需修改服务器DNS地址:
- 进入「网络和共享中心」→ 更改适配器设置
- 右键当前网卡 → 属性 → 双击「Internet 协议版本4 (TCP/IPv4)」
- 手动设置公共DNS,比如
8.8.8.8或114.114.114.114
- 若nslookup能返回IP,再执行
ping smtp.office365.com,若无法连通,需检查防火墙或安全组限制
- 若提示无法找到主机,需修改服务器DNS地址:
2. 开放出站端口权限
- 本地防火墙:
打开「Windows Defender防火墙」→ 高级设置 → 出站规则,确认允许应用访问587、25端口的出站流量 - 云平台安全组:
确保当前云服务器的安全组开放了到smtp.office365.com的587(TLS)和25端口的出站权限
3. 检查代理设置
- 若服务器配置了全局代理,需将
smtp.office365.com加入代理白名单,或临时关闭代理测试 - 若Java应用使用自定义代理,可在JVM启动参数中添加
-Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort=清空代理设置测试
总结
需要修改当前Windows Server的配置,重点调整DNS解析、开放防火墙/安全组的出站端口,必要时检查代理设置,这些都是针对服务器网络环境的修改,无需调整应用的SMTP配置。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

