0. MyEclipse 中可以发送成功,本地window下的tomcat 中发送不成功。原因是MyEclipse 的JavaEE 7.0 框架中自带了javax.mail.jar(内部包名是com.sun.mail) 包,导出的war不包含该jar。依赖mail.jar 即可。可以去Maven repository 中下载该包。
包下载地址:http://mvnrepository.com/artifact/com.sun.mail/javax.mail
1. 首先阿里云中的linux系统是精简版,没有域名解析。所以使用邮件服务器时使用IP而不使用域名,即将stmp.163.com换成对于的IP地址为:220.181.12.15。
修改完这个再去远程服务器上测试仍然发送邮件不成功。
2.网上说是阿里云屏蔽了25端口的使用。将邮件改为使用465端口后,邮件发送成功。
以下为使用465端口发送成功的配置
private static final String EMAIL_SMTP_HOST="220.181.12.15"; // smtp.163.com 该域名的IP
public void sendEmail(String toEmail,String subject,String content)
{
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
final Properties props = new Properties();
//设置发送邮件的邮件服务器的属性
props.put("mail.smtp.host", EMAIL_SMTP_HOST); //指定SMTP服务器
//需要经过授权,也就是用户名和密码的效验,这样才能通过验证(一定要有这一条)
props.put("mail.smtp.auth","true"); //指定是否需要SMTP验证
props.put("mail.smtp.user", EMAIL_USER);
//ssl验证时加的
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465"); //使用ssl后的端口,默认一般是25
props.put("mail.smtp.starttls.enable", "false"); //这句很重要的样子
props.put("mail.smtp.ssl.trust", EMAIL_SMTP_HOST);
Authenticator authenticator= new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(EMAIL_USER, EMAIL_PASSWORD);
}
};
Session mailSession = Session.getInstance(props, authenticator);
//有了这句话便可以在发送邮件的过程中在console处显示过程信息,供调试使用
mailSession.setDebug(false);
//省略发送代码。。。
}