这几天做一个服务器的监测,发送邮件。由于新申请了两个163邮箱账号,用于测试,总是提示不被授权。报出以下错误:
avax.mail.AuthenticationFailedException,经过网上查找很多资料,都不能实际解决问题。自己使用以前(通过手机验证)申请经过验证后的邮箱,就可以发送到邮箱。
最终的原因是:以下两种
1.. 先用OutLook测试一下看能否进行正常的收发邮件.是否是from的email地址和Authenticator类中验证的用户名和密码是否正确,要不也会出错.
System.out.println("发送邮箱:"+fromEmail);
System.out.println("接收邮箱:"+toEmail);
System.out.println("163邮箱登录名:"+emailName);
System.out.println("密码:"+emailPassword);
System.out.println("发送原因:"+title); System.out.println("发送内容:"+centent);
Properties properties = new Properties();// 创建Properties对象
properties.setProperty("mail.transport.protocol", "smtp");// 设置传输协议
properties.put("mail.smtp.host", "smtp.163.com");// 设置发信邮箱的smtp地址
properties.setProperty("mail.smtp.auth", "true"); // 验证
//使用验证,创建一个Authenticator
Authenticator auth = new AjavaAuthenticator(emailName,
emailPassword);
//根据Properties,Authenticator创建Session
Session session = Session.getDefaultInstance(properties, auth);
Message message = new MimeMessage(session);// Message存储发送的电子邮件信息
message.setFrom(new InternetAddress(fromEmail));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
toEmail));// 设置收信邮箱
// 指定邮箱内容及ContentType和编码方式
message.setContent(centent, "text/html;charset=utf-8");
message.setSubject(title);// 设置主题
message.setSentDate(new Date());// 设置发信时间
Transport.send(message);
2. 在用户名和密码都没有问题的情况下,如果代码抛出javax.mail.AuthenticationFailedException异常,
如果是新注册的话,邮件的服务商默认刚注册的帐号是不能使用pop3的。
例如163.com在我进行代码测试时,刚刚注册的帐号是没有权限使用该功能的,所以就会抛出上述的异常。