本来想实现一个很简单的发送邮件的功能,但是,在我使用qq邮箱之后就遇到了很多的问题,一会是认证失败,一会又是超时,最后还返回了501服务器拒绝操作,这里简单的做一下总结:
@Component("sendemail")
public class SendEmail {
private JavaMailSenderImpl email;
private SimpleMailMessage message;
public SendEmail() {
// TODO Auto-generated constructor stub
email = new JavaMailSenderImpl();
email.setHost("smtp.qq.com");
email.setUsername("xxxxxx@qq.com");
email.setPassword("xxxxxxx");//授权码
email.setPort(465);
Properties properties = new Properties();
properties.put("mail.smtp.auth", true);
properties.put("mail.smtp.ssl.enable", true);
properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.timeout", 25000);
email.setJavaMailProperties(properties);
}
//发送邮件
public void send(){
message = new SimpleMailMessage();
message.setFrom("xxxxxx@qq.com");
message.setTo("xxxxxx@gmail.com");
message.setSubject("WOW 邮箱激活");
message.setText("test");
email.send(message);
}
}
注意上面的那个password其实是你申请的qq邮箱的授权码(这个你可以去qq邮箱->账户->申请得到)
然后我们的端口不是25,而是465。
这样的话第一个认证的问题就解决了。
然后设置一些属性,就是上面的属性的部分,这里就是代表使用加密的方式连接。这样的话timeout基本就解决了~
然后就是在发送邮件的时候一定要记得写setfrom(你的qq邮箱)不然还是会报501错误的~
参考:https://segmentfault.com/q/1010000004284204
http://zhidao.baidu.com/link? url=FaXyhIMPjKh4JPebyY61IcsFxFKgQMuCzQbR3VzynqCYoJXMJ9rO06_ra3nRUjc9KC78m_9Uvd0owg8kX4n8HK