上週公司的項目要求開發郵件發送功能。本身在網上跟着教程邊學邊作了一下午,如今基本開發完成了。因爲一個同事也想看下該怎麼寫,順便學習下。因此我就寫成了一遍教程,順便鞏固下郵件發送裏面的內容。html
第一步,咱們先寫個Demo,用最快的方式最少的代碼向你展現Java Mail 是如何工做的。
個人開發環境是:java
構建一個簡單的郵件發送,一共須要四步:服務器
//發件人郵箱 String sendEmailAccount = "Example@outlook.com"; //發件人密碼 String sendEmailPassword = "password"; // 發件人郵箱的 SMTP 服務器地址, 此處爲Outlook郵箱的SMTP服務器 String sendEmailSMTPHost = "smtp-mail.outlook.com"; // 收件人郵箱 String receiveMailAccount = "Example@163.com"; //默認端口號設置爲587,也能夠設置爲465,具體取決於SMTP服務器要求的端口號 final String smtpPort = "587"; // 使用Java配置類進行配置 Properties props = new Properties(); // 使用的協議(JavaMail規範要求) props.setProperty("mail.transport.protocol", "smtp"); // 發件人的郵箱的 SMTP 服務器地址 props.setProperty("mail.smtp.host", sendEmailSMTPHost); // 須要請求認證 props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.port", smtpPort); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.socketFactory.port", smtpPort );
Session session = Session.getDefaultInstance(props); // debug模式下會在控制檯打印出日誌,若是不想看日誌應該設置爲false session.setDebug(true);
// 1. 建立一封郵件 MimeMessage message = new MimeMessage(session); // 2. From: 發件人 message.setFrom(new InternetAddress(sendEmailAccount , "ExampleFrom", "UTF-8")); // 3. To: 收件人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "ExampleUser", "UTF-8")); // 4. Subject: 郵件主題(標題有廣告嫌疑,避免被郵件服務器誤認爲是濫發廣告以致返回失敗,請修改標題) message.setSubject("test", "UTF-8"); // 5. Content: 郵件正文 message.setContent("<h3>This is a test email.</h3>", "text/html;charset=UTF-8"); // 6. 設置郵件發件時間 message.setSentDate(new Date()); // 7. 保存設置 message.saveChanges();
// 1. 根據 Session 獲取郵件傳輸對象 Transport transport = session.getTransport(); // 2. 使用 郵箱帳號 和 密碼 鏈接郵件服務器 transport.connect(myEmailAccount, myEmailPassword); // 3. 發送郵件, 發到全部的收件地址, message.getAllRecipients() 獲取到的是在建立郵件對象時添加的全部收件人, 抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); // 4. 關閉鏈接 transport.close();
整合以上步驟的完整代碼以下:session
import java.util.Date; import java.util.Properties; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailExample { public static void main(String[] args) throws Exception { /** * 1.配置發件人郵箱信息以及建立一個Java 配置類存放SMTP服務器地址等參數。 */ // 發件人郵箱 String sendEmailAccount = "Example@outlook.com"; // 發件人密碼 String sendEmailPassword = "password"; // 發件人郵箱的 SMTP 服務器地址, 此處爲Outlook郵箱的SMTP服務器 String sendEmailSMTPHost = "smtp-mail.outlook.com"; // 收件人郵箱 String receiveMailAccount = "Example@163.com"; // 使用Java配置類進行配置 Properties props = new Properties(); // 使用的協議(JavaMail規範要求) props.setProperty("mail.transport.protocol", "smtp"); // 發件人的郵箱的 SMTP 服務器地址 props.setProperty("mail.smtp.host", sendEmailSMTPHost); // 須要請求認證 props.setProperty("mail.smtp.auth", "true"); // 默認端口號設置爲587,也能夠設置爲465,具體取決於SMTP服務器要求的端口號 final String smtpPort = "465"; props.setProperty("mail.smtp.port",smtpPort ); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.socketFactory.port", smtpPort ); /** * 2.建立一個同郵件服務器交互的session */ Session session = Session.getDefaultInstance(props); session.setDebug(true); // 1. 建立一封郵件 MimeMessage message = new MimeMessage(session); // 2. From: 發件人 message.setFrom(new InternetAddress(sendEmailAccount, "ExampleFrom", "UTF-8")); // 3. To: 收件人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "ExampleUser", "UTF-8")); // 4. Subject: 郵件主題(標題有廣告嫌疑,避免被郵件服務器誤認爲是濫發廣告以致返回失敗,請修改標題) message.setSubject("test", "UTF-8"); // 5. Content: 郵件正文 message.setContent("<h3>This is a test email.</h3>", "text/html;charset=UTF-8"); // 6. 設置郵件發件時間 message.setSentDate(new Date()); // 7. 保存設置 message.saveChanges(); /** * 3.建立一封格式化的郵件 */ // 1. 根據 Session 獲取郵件傳輸對象 Transport transport = session.getTransport(); // 2. 使用 郵箱帳號 和 密碼 鏈接郵件服務器 transport.connect(sendEmailAccount, sendEmailPassword); // 3. 發送郵件, 發到全部的收件地址, message.getAllRecipients() 獲取到的是在建立郵件對象時添加的全部收件人, 抄送人, transport.sendMessage(message, message.getAllRecipients()); // 4. 關閉鏈接 transport.close(); } }
這樣一個簡單的JavaMail的Demo就完成了。快去測試下吧。socket