先附上代码
public class JavaMail {
@Test
public void func() throws MessagingException {
Properties prop = new Properties();
prop.setProperty("mail.host","smtp.163.com");
prop.setProperty("mail.smtp.auth","true");
Authenticator aut = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("yonghuming","mima");//由于涉及隐私就用拼音代替了
}
};
Session session = Session.getInstance(prop,aut);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("yonghuming@163.com"));//sender
msg.setRecipients(Message.RecipientType.TO,"yonghuming@qq.com");//recipients
msg.setSubject("这是一封测试邮件");
msg.setContent("你猜猜看是啥","text/html;charset=utf-8");
Transport.send(msg);
}
测试过程中出现AuthenticationFailedException异常,但是通过在网页版上登录163邮箱,确认了自己的用户名密码是正确的,不知道为何抛出异常。后来发现是因为要给第三方授权,例如163邮箱利用qq邮箱的客户端来登录的话,就需要授权。
解决方案:登录163邮箱,点击设置,在客户端授权密码中点击开启,然后重置授权码,注意授权码只能由字母和数字构成。
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("yonghuming","mima");//这里的密码即是授权密码
}