阿里云 ECS smtp.exmail.qq.com 25 端口不通
所以下面设置的25端口是不行的,替换成465端口并修改协议为ssl即可
阿里云的参考这篇博客
http://blog.csdn.net/u013412790/article/details/72904038
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Calendar;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* @version V1.0
* @Description: 发送邮件的工具类
* @Modified By:Ming Created in 16:51 2017/2/6
*/
public class SendEmail {
private static final Logger logger = LogManager.getLogger(SendEmail.class);
private final static String smtpHost = "smtp.qq.com";//配置Email session对象
private final static String messageType = "text/html;charset=UTF-8";//相应内容类型,编码类型
private final static String subject = "iYo (社联网) 密码修改";//主题
private final static String fromEmail = "272194539@qq.com";//发送邮件的邮箱
private final static String password = "xxxxxxxxxxxxxxxx";//密码(口令)
@SuppressWarnings("static-access")
public boolean sendMessage(String to, int id) {
try {
String messageText = appendString(id);
//第一步:配置javax.mail.Session对象
Properties props = new Properties(); // 创建Properties 类用于记录邮箱的一些属性
props.put("mail.smtp.host", smtpHost); //此处填写SMTP服务器
props.put("mail.smtp.starttls.enable", "true");//使用 STARTTLS安全连接
props.put("mail.smtp.port", "25"); //google使用465或587端口
props.put("mail.smtp.auth", "true"); // 表示SMTP发送邮件,必须进行身份验证
props.put("mail.debug", "true");
Session mailSession = Session.getInstance(props, new MyAuthenticator(fromEmail, password));//此处填写你的账号和口令(16位口令)
//第二步:编写消息
InternetAddress fromAddress = new InternetAddress(fromEmail);// 设置发件人的邮箱
InternetAddress toAddress = new InternetAddress(to); // 设置收件人的邮箱
MimeMessage message = new MimeMessage(mailSession);
message.setFrom(fromAddress);
message.addRecipient(RecipientType.TO, toAddress);
message.setSentDate(Calendar.getInstance().getTime());
message.setSubject(subject); // 设置邮件标题
message.setContent(messageText, messageType);// 设置邮件的内容体
// 第三步:发送消息
Transport transport = mailSession.getTransport("smtp");
transport.connect(smtpHost, fromEmail, password);
transport.send(message, message.getRecipients(RecipientType.TO)); // 发送邮件啦
return true;
} catch (MessagingException e) {
e.printStackTrace();
logger.error("邮件发送错误" + e.getMessage());
return false;
} catch (Exception e) {
logger.error("邮件发送错误" + e.getMessage());
return false;
}
}
/**
* @Author: Ming
* @param: id 用户id
* @Description: 添加发送的短信的信息
* @Date: 17:12 2017/2/6
*/
public static String appendString(int id) {
int i;
String t = " ";
String messageText = "";
for (i = 0; i < 4; i++) messageText += t;
messageText += "xxxxxxxxx~<br/>";
for (i = 0; i < 12; i++) messageText += t;
messageText += "没关系,xxxxxxxxx<br/>";
for (i = 0; i < 20; i++) messageText += t;
messageText += "工作室地点:xxxxxxxxx~<br/><br/>";
for (i = 0; i < 28; i++) messageText += t;
messageText += "请点击:http://xxxxxxxxx";
return messageText;
}
}
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* @version V1.0
* @Description: 构建授权信息,用于进行SMTP进行身份验证
* @Modified By:Ming Created in 10:22 2017/2/7
*/
class MyAuthenticator extends Authenticator {
private String userName="";
private String password="";
public MyAuthenticator(String userName,String password){
this.userName=userName;
this.password=password;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(userName, password);
}
}
注意:
如果出现这个错误:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
这个是jdk导致的,jdk里面有一个jce的包,安全性机制导致的访问https会报错,官网上有替代的jar包,换掉就好了
目录 %JAVA_HOME%\jre\lib\security里的local_policy.jar,US_export_policy.jar
JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
借鉴:
http://www.cnblogs.com/1995hxt/p/6185399.html
至此,邮件就应该能成功发出去啦。
本文是日常开发的随手记录,如有问题,请博内留言以帮助我改正和完善,一起努力,一起学习,一起进步!如果觉得有帮助,记得赞一个哟。