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

Java Mail API连接smtp.office365.com时卡在220 2.0.0 SMTP server ready

解决Office 365 SMTP连接卡在"220 2.0.0 SMTP server ready"的问题

我来帮你搞定这个卡在Office 365 SMTP服务器就绪响应后的问题。从你贴的JavaMail调试日志来看,连接已经建立并收到了服务器的就绪信号,但后续流程卡壳了,通常这几个方向能解决问题:

1. 强制启用加密连接

Office 365的SMTP服务要求加密传输,默认的smtp协议(端口25)需要通过STARTTLS升级连接,或者直接使用smtps协议(端口587或465)。你需要在配置中明确添加加密相关属性:

// 方案1:使用smtp协议+STARTTLS(推荐端口587)
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");

// 方案2:直接使用smtps协议(端口465)
props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.port", "465");
props.put("mail.smtps.auth", "true");

2. 确保认证配置正确

Office 365要求严格的身份认证:

  • 如果你的邮箱开启了多因素认证(MFA),不能直接用登录密码,必须使用应用专用密码
  • 未开启MFA的账号可以直接使用登录密码
  • 一定要在Session中传入认证信息:
Session session = Session.getInstance(props, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("your-enterprise-email@domain.com", "your-password-or-app-password");
    }
});

3. 升级JavaMail版本

你当前使用的是JavaMail 1.5.1,这个版本比较老旧,可能和Office 365的最新SMTP协议支持存在兼容性问题。建议升级到最新的Jakarta Mail(原JavaMail)版本,比如2.0.x系列。以Maven依赖为例:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>

4. 排查网络环境限制

很多企业内网的防火墙、代理会拦截SMTP流量,或者限制端口访问:

  • 测试能否正常访问smtp.office365.com的587或465端口(可以用telnet命令:telnet smtp.office365.com 587)
  • 检查是否需要配置代理服务器信息到JavaMail属性中:
props.put("mail.smtp.proxy.host", "your-proxy-host");
props.put("mail.smtp.proxy.port", "your-proxy-port");

5. 补全调试日志定位问题

你提供的日志被截断了,建议开启完整的调试模式,这样能看到后续是否发送了EHLO命令、服务器的响应细节,帮助精准定位卡壳点:

props.put("mail.debug", "true");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:28