Java發送郵件(帶附件)

實現java發送郵件的過程大體有以下幾步:

  1. 準備一個properties文件,該文件中存放SMTP服務器地址等參數。
  2. 利用properties創建一個Session對象
  3. 利用Session創建Message對象,然後設置郵件主題和正文
  4. 利用Transport對象發送郵件

需要的jar有2個:activation.jar和mail.jar

直接看個demo代碼

複製代碼
#----------------這兩個是構建session必須的字段----------
#smtp服務器
mail.smtp.host=smtp.qq.com
#身份驗證
mail.smtp.auth=true
#--------------------------------------------------------------

#發送者的郵箱用戶名
mail.sender.username=[email protected]
#發送者的郵箱密碼
mail.sender.password=xxxxxxxxxx
複製代碼

下面是發送郵件的java代碼

複製代碼
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;


public class JavaMail {
    /**
     * Message對象將存儲我們實際發送的電子郵件信息,
     * Message對象被作爲一個MimeMessage對象來創建並且需要知道應當選擇哪一個JavaMail session。
     */
    private MimeMessage message;
    
    /**
     * Session類代表JavaMail中的一個郵件會話。
     * 每一個基於JavaMail的應用程序至少有一個Session(可以有任意多的Session)。
     * 
     * JavaMail需要Properties來創建一個session對象。
     * 尋找"mail.smtp.host"    屬性值就是發送郵件的主機
     * 尋找"mail.smtp.auth"    身份驗證,目前免費郵件服務器都需要這一項
     */
    private Session session;
    
    /***
     * 郵件是既可以被髮送也可以被受到。JavaMail使用了兩個不同的類來完成這兩個功能:Transport 和 Store。 
     * Transport 是用來發送信息的,而Store用來收信。對於這的教程我們只需要用到Transport對象。
     */
    private Transport transport;
    
    private String mailHost="";
    private String sender_username="";
    private String sender_password="";

    
    private Properties properties = new Properties();
    /*
     * 初始化方法
     */
    public JavaMail(boolean debug) {
        InputStream in = JavaMail.class.getResourceAsStream("MailServer.properties");
        try {
            properties.load(in);
            this.mailHost = properties.getProperty("mail.smtp.host");
            this.sender_username = properties.getProperty("mail.sender.username");
            this.sender_password = properties.getProperty("mail.sender.password");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        session = Session.getInstance(properties);
        session.setDebug(debug);//開啓後有調試信息
        message = new MimeMessage(session);
    }

    /**
     * 發送郵件
     * 
     * @param subject
     *            郵件主題
     * @param sendHtml
     *            郵件內容
     * @param receiveUser
     *            收件人地址
     */
    public void doSendHtmlEmail(String subject, String sendHtml,
            String receiveUser) {
        try {
            // 發件人
            //InternetAddress from = new InternetAddress(sender_username);
            // 下面這個是設置發送人的Nick name
            InternetAddress from = new InternetAddress(MimeUtility.encodeWord("幻影")+" <"+sender_username+">");
            message.setFrom(from);
            
            // 收件人
            InternetAddress to = new InternetAddress(receiveUser);
            message.setRecipient(Message.RecipientType.TO, to);//還可以有CC、BCC
            
            // 郵件主題
            message.setSubject(subject);
            
            String content = sendHtml.toString();
            // 郵件內容,也可以使純文本"text/plain"
            message.setContent(content, "text/html;charset=UTF-8");
            
            // 保存郵件
            message.saveChanges();
            
            transport = session.getTransport("smtp");
            // smtp驗證,就是你用來發郵件的郵箱用戶名密碼
            transport.connect(mailHost, sender_username, sender_password);
            // 發送
            transport.sendMessage(message, message.getAllRecipients());
            //System.out.println("send success!");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(transport!=null){
                try {
                    transport.close();
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        JavaMail se = new JavaMail(false);
        se.doSendHtmlEmail("郵件主題", "郵件內容", "[email protected]");
    }
}
複製代碼

 

上面只能實現文本的發送,如果我們要發送附件,就需要用到Multipart對象了。

按 Ctrl+C 複製代碼
按 Ctrl+C 複製代碼

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章