530 A secure connection is requiered(such as ssl)
出现该错误的原因主要是邮箱为了保证安全,有了黑名单制度,通过网站发来了一些邮件(包括验证邮件会被认为不安全),所以直接拦截处理掉
解决的办法:
1、如果是接收邮箱,则添加白名单,将测试的发送邮箱改为白名单。
2、如果是发送邮箱,建议使用客户端授权码,这个授权码替代上面代码部分的passwd即可成功发送邮件。
553 authentication is required
出现该错误的原因是邮箱的用户名和密码错误,或者创建信件服务器的验证步骤时出错,即properties.put("mail.smtp.auth", true),true不为boolean值
解决的办法:
1、校验一下邮箱的用户名和密码是否正确
2、properties.put("mail.smtp.auth",true);//设置smtp身份认证
实际应该是这properties.put("mail.smtp.auth", “true”);//设置smtp身份认证
该认证也是对用户名和密码的验证,必须要有这一条
535 Error:请使用授权码登录。
详情请看:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
解决的办法:这里用到的不是你的邮箱登陆密码而是开启邮箱smtp服务之后给的授权码。输入这个授权码就可以。
AuthenticationFailedException异常
在用户名和密码都没有问题的情况下,如果代码抛出javax.mail.AuthenticationFailedException异常,请从以下几个方面查找:
1、有些新注册的邮箱是不提供SMTP服务的,这时候用这样的邮箱发信就会报此异常。网易的现在新注册的邮箱已经不提供smtp服务了,所以不管你是jMail还是用outlook都无法验证。以前注册并且使用过pop服务的邮箱现在还可以用。而且现在SINA新注册的邮箱也不提供smtp服务。
2、其次要看from的email地址和Authenticator类中验证的用户名是否是一致的,要不也会出错。
另外
邮件验证的时候Session.getDefaultInstance(props, authentic);
何谓getDefaultInstance?
从处理流程中可以看出,首先是从缓存中查找是否有properties存在
如果存在,则加载默认的properties
如果不存在才加载用户自己定义的properties,
所以当一个应用为每个用户独立创建properties的时候,还是应该调用getInstance,
除非你希望有一个默认的properties让用户使用
它会首先去内存和系统文件中去找properties,所以不管我在页面改几次数据或者方法参数里传多少次不同的邮件帐号如果有smtp不同的都是按照第一次的来,其实在后台中生成session时都和系统启动时的一样,所以在MailUtil.sendTextMessage(mailSession,RptTaskMailConfig.Sender,
receiver,null,mail_subject,mail_content,"GB2312",null);时session里的sender和传入的sender不一致,因此出错
报javax.mail.AuthenticationFailedException
session.getdefaultinstance和getinstance的区别(引自网络):
如果想要同时使用两个帐号发送javamail,比如使用1@a.com发送1#邮件,使用2@a.com发送2#邮件,这时候,你就需要同时创建两个java.mail.Session对象。但是如果你仍然使用Session.getDefaultInstance创建session对象的话,你会发现,第二个username:2@a.com创建的session永远都和第一个一样,这是为什么呢?因为,getDefaultInstance是真正单例模式,而且,里面的username和password属性是final型的,无法更改。所以,你会发现两封email都是由1@a.com发出来的。所以这个时候你要使用javax.mail.Session.getInstance()方法来创建session对象。
所以如果发邮件一直只用一个邮件发是不会有问题的
但是你会随机选择不同邮件服务地址来给不同人发邮件
就要注意这个问题