public class EmailUser {
public static String myEmailAccount = "*****@***.***"; //郵箱
public static String myEmailPassword = "*************"; //郵箱授權碼【非郵箱密碼】
// 發件人郵箱的 SMTP 服務器地址, 必須準確, 不同郵件服務器地址不同, 一般(只是一般, 絕非絕對)格式為:smtp.xxx.com
// 網易163郵箱的 SMTP 服務器地址為: smtp.163.com
public static String myEmailSMTPHost = "smtp.qq.com"; //qq郵箱 SMTP 服務器
// 收件人郵箱(替換為自己知道的有效郵箱)
public static String receiveMailAccount = "***@***.***"; //收件人郵箱
public String md5(String inputStr){
BigInteger bigInteger=null;//高精度數據類型
try {
MessageDigest md = MessageDigest.getInstance("md5");//說明加密類型
byte[] inputData = inputStr.getBytes();//字符轉換成字節
md.update(inputData); //加密
bigInteger = new BigInteger(md.digest());//轉換成高精度數字類型
// System.out.println("MD加密后:" + bigInteger.toString()); //輸出
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bigInteger.toString();
}
public String activationCode(){
//System.out.println(md5("ab45c9"));
return md5("ab45c9");
}
String key=null;
public String smtpToEmail(){
// 1. 創建參數配置, 用于連接郵件服務器的參數配置
Properties props = new Properties(); // 參數配置
props.setProperty("mail.transport.protocol", "smtp"); // 使用的協議(JavaMail規范要求)
props.setProperty("mail.smtp.host", myEmailSMTPHost); // 發件人的郵箱的 SMTP 服務器地址
props.setProperty("mail.smtp.auth", "true"); // 需要請求認證
// PS: 某些郵箱服務器要求 SMTP 連接需要使用 SSL 安全認證 (為了提高安全性, 郵箱支持SSL連接, 也可以自己開啟),
// 如果無法連接郵件服務器, 仔細查看控制臺打印的 log, 如果有有類似 “連接失敗, 要求 SSL 安全連接” 等錯誤,
// 打開下面 之間的注釋代碼, 開啟 SSL 安全連接。
final String smtpPort = "465";
props.setProperty("mail.smtp.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.class", ";
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", smtpPort);
// 2. 根據配置創建會話對象, 用于和郵件服務器交互
Session session = Session.getDefaultInstance(props);
session.setDebug(true); // 設置為debug模式, 可以查看詳細的發送 log
// 3. 創建一封郵件
MimeMessage message=null;
try {
message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 4. 根據 Session 獲取郵件傳輸對象
Transport transport = null;
try {
transport = session.getTransport();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 5. 使用 郵箱賬號 和 密碼 連接郵件服務器, 這里認證的郵箱必須與 message 中的發件人郵箱一致, 否則報錯
//
// PS_01: 成敗的判斷關鍵在此一句, 如果連接服務器失敗, 都會在控制臺輸出相應失敗原因的 log,
// 仔細查看失敗原因, 有些郵箱服務器會返回錯誤碼或查看錯誤類型的鏈接, 根據給出的錯誤
// 類型到對應郵件服務器的幫助網站上查看具體失敗原因。
//
// PS_02: 連接失敗的原因通常為以下幾點, 仔細檢查代碼:
// (1) 郵箱沒有開啟 SMTP 服務;
// (2) 郵箱密碼錯誤, 例如某些郵箱開啟了獨立密碼;
// (3) 郵箱服務器要求必須要使用 SSL 安全連接;
// (4) 請求過于頻繁或其他原因, 被郵件服務器拒絕服務;
// (5) 如果以上幾點都確定無誤, 到郵件服務器網站查找幫助。
//
// PS_03: 仔細看log, 認真看log, 看懂log, 錯誤原因都在log已說明。
try {
transport.connect(myEmailAccount, myEmailPassword);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 6. 發送郵件, 發到所有的收件地址, message.getAllRecipients() 獲取到的是在創建郵件對象時添加的所有收件人, 抄送人, 密送人
try {
transport.sendMessage(message, message.getAllRecipients());
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 7. 關閉連接
try {
transport.close();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return key;
}
public MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
// 1. 創建一封郵件
MimeMessage message = new MimeMessage(session);
// 2. From: 發件人
message.setFrom(new InternetAddress(sendMail, "Dawn技術郵箱測試", "UTF-8"));
// 3. To: 收件人(可以增加多個收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用戶", "UTF-8"));
// 4. Subject: 郵件主題
message.setSubject("郵件測試", "UTF-8");
//得到激活碼
key=activationCode();
System.out.println("=====1="+key);
// 5. Content: 郵件正文(可以使用html標簽)
// message.setContent("點擊跳轉網頁測試", "text/html;charset=UTF-8");
message.setContent("請點擊我[測試]跳轉Dawn技術首頁", "text/html;charset=UTF-8"); //以本人網站為例
// 6. 設置發件時間
message.setSentDate(new Date());
// 7. 保存設置
message.saveChanges();
return message;
}
//主函數測試
public static void main(String[] args) {
EmailUser m=new EmailUser();
//m.activationCode();
System.out.println("*"+m.smtpToEmail());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//m.activationCode();
}
}