前言
首先,需要说明的是,本错误来自于一个简单的基于java mail的api程序,邮件服务器是163的SMTP,即smtp.163.com.
报错如下;
1 javax.mail.AuthenticationFailedException: 550 User has no permission 2 3 at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:809) 4 at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:752) 5 at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:669) 6 at javax.mail.Service.connect(Service.java:317) 7 at javax.mail.Service.connect(Service.java:176) 8 at javax.mail.Service.connect(Service.java:125) 9 at javax.mail.Transport.send0(Transport.java:194) 10 at javax.mail.Transport.send(Transport.java:124) 11 at com.shihuc.demo.SendEmail.send(SendEmail.java:154) 12 at com.shihuc.demo.SendEmail.main(SendEmail.java:181) 13 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 14 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 15 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 16 at java.lang.reflect.Method.invoke(Method.java:606) 17 at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
则要考虑是不是没有启用应用密码功能。我的测试过程,是通过启用应用密码功能,得以将500的问题解决掉的!
步骤
1. 登录自己的163邮箱,注意,要用你的应用程序中设置的邮箱地址去登录。
2. 在主菜单栏上的“设置”子菜单里面,选择POP3/SMTP/IAMP菜单。
3. 若没有开启“客户端授权密码”,则选择将其开启。开启后,会给你生成一个应用授权密码。要用这个生成的密码作为java mail API发送邮件的认证密码,如此,才能解除500密码,若用邮箱的登录密码去设置这个认证密码,会遇到500的错误。下图是开启“客户端授权密码”功能后的截图:
这个错误,我折腾了很长时间,百度上找了很久,都找不到,google查看的信息,都是基于gmail的问题(535错误码,其实类似163的这个500的错误),最后,自己研究了下163邮箱上的功能菜单,摸索着修改,最终解决了这个问题!