阿裡雲 ECS smtp.exmail.qq.com 25 端口不通
是以下面設定的25端口是不行的,替換成465端口并修改協定為ssl即可
阿裡雲的參考這篇部落格
http://blog.csdn.net/u013412790/article/details/
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 = "[email protected]";//發送郵件的郵箱
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 = ; i < ; i++) messageText += t;
messageText += "xxxxxxxxx~<br/>";
for (i = ; i < ; i++) messageText += t;
messageText += "沒關系,xxxxxxxxx<br/>";
for (i = ; i < ; i++) messageText += t;
messageText += "工作室地點:xxxxxxxxx~<br/><br/>";
for (i = ; i < ; 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--download-html
JDK8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-html
借鑒:
http://www.cnblogs.com/hxt/p/html
至此,郵件就應該能成功發出去啦。
本文是日常開發的随手記錄,如有問題,請博内留言以幫助我改正和完善,一起努力,一起學習,一起進步!如果覺得有幫助,記得贊一個喲。