Java Mail 郵件發送Demo

上週公司的項目要求開發郵件發送功能。本身在網上跟着教程邊學邊作了一下午,如今基本開發完成了。因爲一個同事也想看下該怎麼寫,順便學習下。因此我就寫成了一遍教程,順便鞏固下郵件發送裏面的內容。html


Demo

第一步,咱們先寫個Demo,用最快的方式最少的代碼向你展現Java Mail 是如何工做的。
個人開發環境是:java

  1. JDK1.6
  2. java-mail.jar 1.45

構建一個簡單的郵件發送,一共須要四步:服務器

1.配置發件人郵箱信息以及建立一個存放SMTP服務器地址等參數的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 );
2.建立一個同郵件服務器交互的session
Session session = Session.getDefaultInstance(props);
        // debug模式下會在控制檯打印出日誌,若是不想看日誌應該設置爲false
        session.setDebug(true);
3.建立一封格式化的郵件
// 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();
4.發送郵件
// 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

相關文章
相關標籤/搜索