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

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 = 587
  • smtp.sender.reserve.auth_type = ANONYMOUS
  • smtp.sender.main.auth_type = TLS
  • smtp.sender.main.host = smtp.office365.com
  • smtp.sender.reserve.port = 25
  • smtp.sender.main.timeout_sec = 90
分析与解决方案

异常核心是java.net.UnknownHostException: smtp.office365.com,说明当前Windows Server无法解析该域名,和SMTP配置本身无关(其他环境同配置可正常运行),需要修改当前服务器的网络相关配置,具体操作如下:

1. 修复DNS解析问题

  • 打开命令提示符(CMD),执行nslookup smtp.office365.com:
    • 若提示无法找到主机,需修改服务器DNS地址:
      1. 进入「网络和共享中心」→ 更改适配器设置
      2. 右键当前网卡 → 属性 → 双击「Internet 协议版本4 (TCP/IPv4)」
      3. 手动设置公共DNS,比如8.8.8.8或114.114.114.114
    • 若nslookup能返回IP,再执行ping smtp.office365.com,若无法连通,需检查防火墙或安全组限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:17:07