Java Mail使用IMAPS协议连接报MessagingException异常如何解决
Java Mail 邮件连接异常排查解决
核心错误定位
你收到的220 * ESMTP MAIL Service ready是SMTP服务的握手响应,说明你配置里填写的port参数是SMTP服务端口,而非IMAP/IMAPS服务的端口,协议和端口不匹配是导致两类异常的根本原因。
排查步骤
- 首先核对你所用邮箱服务的官方IMAP端口参数:
- 加密IMAPS默认端口为993
- 非加密IMAP(支持STARTTLS升级加密)默认端口为143
请勿错填为SMTP的25、465、587端口或者POP3的110、995端口
- 其次清理配置冲突:你当前的配置同时开启了
SSLSocketFactory、ssl.enable、starttls.enable三类加密配置,属于冗余冲突配置,不同版本Java Mail对冲突配置的处理逻辑不一致,易触发异常,需根据端口类型保留对应配置即可。
修正后参考配置
方案1:使用IMAPS 993隐式加密端口(推荐)
properties.setProperty("mail.imaps.host", host); properties.setProperty("mail.imaps.port", "993"); properties.setProperty("mail.imaps.ssl.enable", "true"); properties.setProperty("mail.imaps.ssl.trust", "*"); properties.setProperty("mail.store.protocol", "imaps"); // Debug properties.setProperty("mail.debug", "true");
方案2:使用IMAP 143端口+STARTTLS加密
properties.setProperty("mail.imap.host", host); properties.setProperty("mail.imap.port", "143"); properties.setProperty("mail.imap.starttls.enable", "true"); properties.setProperty("mail.imap.ssl.trust", "*"); properties.setProperty("mail.store.protocol", "imap"); // Debug properties.setProperty("mail.debug", "true");
验证方法
调整配置后启动程序,查看debug日志:如果服务端返回的首条响应是* OK ... IMAP4rev1 ...格式,说明端口匹配正确;如果仍然返回ESMTP相关响应,需联系邮箱服务商确认正确的IMAP接入端口。
内容的提问来源于stack exchange,提问作者Bi.Yo.Son
相关产品推荐
相关产品推荐

