使用Java Mail连接IMAP邮箱报错:AuthenticationFailedException(Server Unavailable.15)
我来帮你一步步排查这个问题——javax.mail.AuthenticationFailedException: Server Unavailable. 15这个错误通常和配置细节、账号权限或者网络限制有关,咱们从几个核心方向入手:
1. 补全IMAP SSL核心配置
你用了IMAPSSLStore,但要确保Java Mail的关键配置项没有遗漏,很多时候认证失败就是因为配置不全:
Properties props = System.getProperties(); // 替换成你的邮箱服务器地址,比如imap.gmail.com/imap.qq.com props.setProperty("mail.imaps.host", "你的IMAP服务器地址"); props.setProperty("mail.imaps.port", "993"); // IMAP SSL默认端口是993,别写错 props.setProperty("mail.imaps.auth", "true"); // 必须开启认证开关 props.setProperty("mail.imaps.starttls.enable", "true"); // 部分服务器强制要求TLS // 测试阶段可临时信任所有证书(正式环境请替换为指定证书) props.setProperty("mail.imaps.ssl.trust", "*");
2. 确认账号认证方式匹配
现在绝大多数邮箱服务商都禁用了明文密码登录,别用账号原密码,改用应用专用密码/授权码:
- Gmail:开启两步验证后,在安全设置里生成应用专用密码
- QQ/163等国内邮箱:先在邮箱设置中开启IMAP服务,再生成对应授权码
- 检查账号是否因多次登录失败被服务器临时锁定(去邮箱安全中心解锁)
3. 排查网络与服务器限制
- 用
telnet imap.你的服务器.com 993测试端口连通性,如果连接失败,说明网络屏蔽了993端口,需要联系运维开放 - 企业邮箱通常会限制IP访问,把你的应用服务器IP加入邮箱白名单
- 部分服务器会因负载过高返回“Server Unavailable”,可以换个时间重试
4. 开启Java Mail调试日志定位细节
开启调试日志能看到IMAP交互的完整过程,比单纯的错误提示有用得多:
props.setProperty("mail.debug", "true");
运行程序后,查看控制台输出的IMAP命令日志,服务器往往会返回更具体的错误原因(比如“认证方式不支持”“凭证无效”)
5. 升级Java Mail版本(可选但推荐)
你用的Java Mail 1.5.6是2016年的旧版本,虽然和Java 8兼容,但对新的SSL协议、服务器特性支持有限。建议升级到1.6.2版本(Maven依赖如下),很多老版本的兼容性问题会直接解决:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency>
6. 检查代码中的认证逻辑
确保你正确调用了connect方法,并且传入的是正确的凭证:
// 这里要用应用专用密码/授权码,不是账号原密码 store.connect("你的邮箱账号", "应用专用密码/授权码");
别遗漏connect调用,也别把账号和密码的顺序搞反了
补充:错误码
15是服务器自定义的错误码,不同服务商的含义略有差异——可能是认证方式不匹配、服务器临时过载,也可能是IP被限制,所以开启调试日志是最直接的排查手段
内容的提问来源于stack exchange,提问作者Hemanth
相关产品推荐
相关产品推荐

