package com.app.tools;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
// public static final String HOST = "mx3.qq.com";
public static final String HOST = "smtp.163.com";
public static final String PROTOCOL = "smtp";
public static final int PORT = 25; /*465 這是QQ的端口*/
public static final String FROM = "xxxxx@163.com";//發件人的email
public static final String PWD = "xxxxxxx";//發件人密碼
private static Session getSession() {
Properties props = new Properties();
props.put("mail.smtp.host", HOST);//設置服務器地址
props.put("mail.store.protocol" , PROTOCOL);//設置協議
props.put("mail.smtp.port", PORT);//設置端口
props.put("mail.smtp.auth" , "true");
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(FROM, PWD);
}
};
Session session = Session.getDefaultInstance(props , authenticator);
return session;
}
public static void send(String toEmail , String content) {
Session session = getSession();
try {
System.out.println("--send--"+content);
// Instantiate a message
Message msg = new MimeMessage(session);
//Set message attributes
msg.setFrom(new InternetAddress(FROM));
InternetAddress[] address = {new InternetAddress(toEmail)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject("賬號激活郵件");
msg.setSentDate(new Date());
msg.setContent(content,"text/html;charset=utf-8");
//Send the message
Transport.send(msg);
}
catch (MessagingException mex) {
mex.printStackTrace();
}
}
public static void main(String[] args) {
new SendEmail().send("xxxxx@qq.com","dsfsdf");
System.out.println("success");
}
}
1、是否開啟了認證,QQ郵箱、163郵箱均要開啟認證

2、javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25; //連接超時

解決參考:將這個屬性的true加上引號,請奇葩的異常! 注意:如果沒有這條屬性,可能或拋出 需要認證異常(Required Authentication) 這個異常一般是由1、2造成的
3、在設置屬性的時候,一定要注意弄清楚使用郵箱的地址和端口。 javax.mail.AuthenticationFailedException
QQ郵箱端口: mx3.qq.com 端口:465 163郵箱:smtp.163.com 端口:25 這是都是發送郵件時使用的smtp協議所用。如果是收郵件則用的是pop3協議,那又不一樣了。這個請自行查找
4、
在使用QQ郵箱發送郵件的時候,出現這個異常。 查了一下,官方說法是發送太頻繁所以被鎖定了!目前還沒有解決。明天試試看看能不能成功(未成功)
以上是幾個容易出現的異常,解決之後,其他異常可根據具體拋出的信息解決!