這裡是到處搜刮來的技術及文章都會註明出處,主要是自己參考用,也可以互相討論,P.S. 如果侵權請告知,謝謝

JavaMail是個歷史悠久的寄送電子郵件Email套件,由Sun公司所開發(Oracle),因為電子郵件數年來並沒有多大的改變,所以一直都是十分方便的一個套件,使用方法可參考Java程式Mail、EDM(電子型錄)寄送這篇。

而現在有了另一個framework,是由Apache組職所提供的開放原始碼套件Apache Commons email,使用上更為簡單,而且支援度也很高,像是gmail要使用javamail來寄送,就需要設定繁雜的Sectury項目,而Apache commons email就顯的簡單許多,底下的範例就是使用gmail的smtp.gmail.com來當SMTP服務寄送信件的,我把它應用在之前的留言板,當有人留言時,就可以馬上接到信件的通知。

留言板存檔後寄信

 

收到信件的內容

這範例需要的lib是Apache commons email,寄件的方法,需先建立一個Email主體,可以是SimpleEmail,寄送純文字,也可以是HtmlEmail,寄送html內容,也可以對Email主體進行attach附加文件的功能。

比較特別的是gmail需要使用到TLS或SSL加密,所以需要對Email主體設定setTSL為真及利用setAuthenticator來告知道驗證用的帳號及密碼。

原始碼如下:

mail.properties

host=smtp.gmail.com
port=587
from=tyu@yslifes.com
user=tyu@yslifes.com
pwd=tyu123
sleep=100
fromName=yslifes Board

Sender

這是寄Mail的Thread,寫成線程可以不用等待SMTP回報傳送結果,所以寄送成功與否並不會回傳到前端,如此可以減少前端等待寄Mail的時間。

package yslifes.mail.thread;
 
import java.util.*;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
 
public class Sender extends java.lang.Thread {
    private String content;
 
    private org.apache.log4j.Logger log;
    private String subject;
    private String to;
    private static Properties p = null;
 
    public static void loadProperties() {
        try {
            p = new Properties();
            // log.info(this.getClass().getResource("/mail.properties").getPath());
            System.out.println(Sender.class.getResource("/mail.properties"));
            java.io.BufferedReader reader = new java.io.BufferedReader(
                    new java.io.FileReader(Sender.class.getResource(
                            "/mail.properties").getFile()));
            ;
            String str = null;
            while ((str = reader.readLine()) != null) {
                String sp[] = str.split("=");
                p.put(sp[0].trim(), sp[1].trim());
                System.out.println(sp[0].trim() + "," + sp[1].trim());
            }
 
            reader.close();
        } catch (java.io.IOException e) {
 
        }
    }
 
    public Sender(String to, String subject, String content) {
        super();
        if (p == null)
            loadProperties();
        this.content = content;
        this.to = to;
        log = org.apache.log4j.Logger.getLogger(this.getClass());
        // this.p = p;
        this.subject = subject;
    }
 
    public void run() {
        HtmlEmail email = new HtmlEmail();
 
        try {
 
            String host = p.getProperty("host");
 
            String from = p.getProperty("from");
            String from_name = p.getProperty("fromName");
 
            String user = p.getProperty("user");
            String pwd = p.getProperty("pwd");
            String port = p.getProperty("port");
 
            email.setTLS(true); // 是否TLS檢驗,某些email需要TLS安全檢驗,同理有SSL檢驗
            // email.setSSL(true);
            email.setHostName(host);
            email.setAuthenticator(new DefaultAuthenticator(user, pwd)); // 使用者帳號及密碼
            //email.setAuthentication(user, user);
            // email.setSslSmtpPort(port);
            email.setSmtpPort(Integer.parseInt(port));
 
            email.setFrom(from, from_name);
            email.setCharset("utf-8");
 
            email.addTo(to); // 接收方
            // email.addCc("yyyyyy@gmail.com"); //副本
            // email.addBcc("zzzzzz@gmail.com"); //密件副本
            email.setSubject(subject); // 標題
 
            // email.setTextMsg("Your email client does not support HTML messages");
            email.setHtmlMsg(content); // 内容
            email.send();
 
        } catch (EmailException e) {
            e.printStackTrace();
            log.info(e);
        } catch (Exception e) {
            e.printStackTrace();
            log.info(e);
        }
    }
    public static void main(String args[])
    {
        (new Sender("taa@yslifes.com","test","test")).start();
    }
 
}

如果想把這個範例使用到之前範例留言板,可以把程式碼加到postAction.jsp裡。

                    ps.setString(++idx, yslifes.tools.StringTool.reFormat(mail));
                    ps.setString(++idx, yslifes.tools.StringTool.reFormat(tel));
                    ps.setString(++idx, desc);
                    logger.debug("PostAction:" + desc);
                    ps.executeUpdate();
 
                    (new yslifes.mail.thread.Sender("yku@yslifes.com",
                    "有人留言","<html><body>標題:"+title+"<br/>內容:"+desc+"</body></html>")).start();

 

創作者介紹

瑞、瑪姬與小昆妮♫趴趴走黑白吃

瑞、瑪姬與小昆妮 發表在 痞客邦 留言(0) 人氣()