Office365 POP3 over SSL连接失败:AuthenticationFailedException排查
问题描述
通过本地配置了SSL加密的Office365 POP3服务器下载邮件附件时连接失败,抛出错误:
AuthenticationFailedException: Logon failure: unknown user name and bad password.
已确认邮箱账号与密码正确,且该功能此前可正常使用,相关配置代码如下:
// ready to connect server Properties props = new Properties(); props.setProperty("mail.store.protocol", "pop3"); props.setProperty("mail.pop3.port", port); props.setProperty("mail.pop3.host", host); props.setProperty("mail.pop3.socketFactory.fallback", "false"); props.setProperty("mail.pop3.socketFactory.port", port); props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // create session Session session = Session.getInstance(props); store = session.getStore("pop3"); store.connect(emailAddress, password); // retrieve folder = store.getFolder("INBOX"); //inbox folder.open(Folder.READ_WRITE);
遗漏的配置及修复方案
- 启用POP3强制认证:Office365 POP3服务器要求必须开启认证才能登录,当前代码未配置该属性,需添加:
props.setProperty("mail.pop3.auth", "true"); - 替换旧版SSL配置为官方推荐方式:原代码使用的
socketFactory是JavaMail旧版SSL配置逻辑,现在推荐使用更简洁的SSL启用配置,可替换原socketFactory相关属性为:
同时需确保端口设置为Office365 POP3 SSL标准端口props.setProperty("mail.pop3.ssl.enable", "true");995,服务器地址为outlook.office365.com。 - 适配多因素认证(MFA)场景:如果邮箱账号开启了MFA,普通密码无法用于POP3登录,需前往微软账号中心生成应用密码,并用该密码替换代码中的普通登录密码。
- 简化协议配置(可选):直接使用
pop3s协议(POP3 over SSL的标准协议),无需额外配置socketFactory,简化后的核心配置如下:props.setProperty("mail.store.protocol", "pop3s"); props.setProperty("mail.pop3s.host", "outlook.office365.com"); props.setProperty("mail.pop3s.port", "995"); props.setProperty("mail.pop3s.auth", "true");
内容的提问来源于stack exchange,提问作者TIM
相关产品推荐
相关产品推荐

