问题描述
我有一个 javamail 程序可以定期读取我的 pop3 帐户的电子邮件。大多数情况下,它连接并成功运行。但是,过了一会儿,我开始收到 javax.mail.AuthenticationFailedException
并且无法在进一步调用时连接它。当我关闭并启动我的程序时,它会使用相同的凭据再次成功连接。为了进一步分析,我启用了会话调试日志。以下是命令跟踪输出:
@2021-05-17 12:36:08.150 !DEBUG +OK The Microsoft Exchange POP3 service is ready. #27820545
@2021-05-17 12:36:08.150 !DEBUG CAPA #27820545
@2021-05-17 12:36:08.150 !DEBUG +OK #27820545
@2021-05-17 12:36:08.150 !DEBUG TOP #27820545
@2021-05-17 12:36:08.150 !DEBUG UIDL #27820545
@2021-05-17 12:36:08.150 !DEBUG SASL PLAIN #27820545
@2021-05-17 12:36:08.150 !DEBUG USER #27820545
@2021-05-17 12:36:08.150 !DEBUG STLS #27820545
@2021-05-17 12:36:08.150 !DEBUG . #27820545
@2021-05-17 12:36:08.150 !DEBUG DEBUG POP3: authentication command trace suppressed #27820545
@2021-05-17 12:36:50.341 !DEBUG DEBUG POP3: authentication command Failed #27862736
@2021-05-17 12:36:50.342 !DEBUG QUIT #27862737
@2021-05-17 12:36:50.342 !DEBUG -ERR Protocol error. 19 #27862737
@2021-05-17 12:37:50.371 !DEBUG DEBUG: getProvider() returning javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle] #27922766
@2021-05-17 12:37:50.371 !DEBUG DEBUG POP3: mail.pop3.rsetbeforequit: false #27922766
@2021-05-17 12:37:50.371 !DEBUG DEBUG POP3: mail.pop3.disabletop: false #27922766
这可能是什么原因?帐户服务提供商是 Microsoft Exchange。协议 error.19 表示什么?
解决方法
我怀疑为 POP 服务器提供的身份验证凭据已过期,或者您对所有连接使用相同的会话,并且它会在一段时间后过期。但就像@JRichardsz 说的,请附上您的代码片段和异常堆栈。
,在它突然停止工作之前它可以工作一段时间,并且在您刚刚重新启动程序后它再次工作,这允许假设您的代码本身没有任何问题。
您是连接到本地 Exchange 服务器还是 Office365?
后者为各种服务活动强加了几个限制值,并且在电子邮件的情况下,当达到此限制之一时,您会收到身份验证失败。
您也可以在本地 Exchange 上配置相同或类似的限制,并且在您点击它们时会出现相同的错误行为。
在您的情况下,我假设您在给定的时间内达到了登录尝试次数的限制。检查如果您不那么频繁地 ping 邮箱会发生什么。