使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect

使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第1张图片
用java发送邮件时,总提示上图错误。检查了很多遍,账号密码都正确,可是总是提示连接失败。
最后发现,问题并不出在代码上,而是出在了邮箱的设置上。下面介绍一下解决方法:(以网易邮箱为例)
首先,点击邮箱上方的“设置”,然后点击“POP3/SMTP/IMAP”.
使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第2张图片
出现以下界面,将“POP3/SMTP服务”和“IMAP/SMTP服务”前面打上勾。
使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第3张图片
然后邮箱会出现以下提醒
使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第4张图片
点击确定,然后选择开启
使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第5张图片
然后提示发送短信“9988”至106981630163222.
短信费用由运营商收取,大家无需担心,大部分的运行商收费标准应该是:网内短信0.1元/条
使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第6张图片
发送短信成功后,点击“我已发送”
出现以下界面

使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第7张图片
输入两次相同的授权码即可,授权码在第三方中的作用相当于登录密码,不要忘记。
(不用担心别人通过代码知道自己的邮箱密码了)

然后选中下面的三个服务,点击确定。
使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect_第8张图片
最后,在自己的代码里,将密码改为刚刚设置的客户端授权码即可。

完整错误提示:
javax.mail.AuthenticationFailedException: failed to connect
at javax.mail.Service.connect(Service.java:322)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at com.test.MailDemo.sendEmail(MailDemo.java:36)
at com.servlet.RegisterServlet.doPost(RegisterServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:444)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137)
at org.apache.coyote.AbstractProtocol A b s t r a c t C o n n e c t i o n H a n d l e r . p r o c e s s ( A b s t r a c t P r o t o c o l . j a v a : 637 ) a t o r g . a p a c h e . t o m c a t . u t i l . n e t . J I o E n d p o i n t AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint AbstractConnectionHandler.process(AbstractProtocol.java:637)atorg.apache.tomcat.util.net.JIoEndpointSocketProcessor.run(JIoEndpoint.java:319)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor W o r k e r . r u n ( T h r e a d P o o l E x e c u t o r . j a v a : 617 ) a t o r g . a p a c h e . t o m c a t . u t i l . t h r e a d s . T a s k T h r e a d Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread Worker.run(ThreadPoolExecutor.java:617)atorg.apache.tomcat.util.threads.TaskThreadWrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

找到错误提示的那一行,发现是

Transport.send(msg);

下面解释一下原因:

SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。

我们在用java实现邮件发送时,使用了SMTP协议,却没有在邮箱里开启SMTP服务,这样肯定发送失败!!!

你可能感兴趣的:(使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect)