Commons:Apache Commons Emailをカプセル化してメール送信を簡素化

17150 ワード

参考資料
1 Apache Commons Emailでメールを簡略化
http://www.blogjava.net/fastunit/archive/2008/01/25/177799.html
私がテストする時に使ったのは:新浪のメールボックス:smtp.sina.comでもいいです
次のように設定します.
Commons: 封装Apache Commons Email简化邮件发送_第1张图片
Exception: javax.net.ssl.SSLException:Unrecognized SSL message,plaintext connection参考文章:http://zhidao.baidu.com/question/227409027.html解答:JavaMailのPropertiesを構成する場合、mailを指定しないでください.smtp.socketFactory.class、TLSは普通のSocketを使っているからです.次にプロパティmailを指定します.smtp.starttls.义齿
紹介する
Commons Emailはjavamailをカプセル化しており、非常に簡単に使用できます.機能:簡易テキストメール、添付ファイル付きメール、HTML形式のメール公式トップページ:http://commons.apache.org/email/現在の最新バージョンは1.2の公式例です.http://commons.apache.org/email/userguide.html
エンジニアリング環境:XP+Myeclipse 6.5+JDK1.6
一実現機能
1よく使われる4種類のEmailを送信する方法(テキスト,html,img,file)をカプセル化し,ユーザは1つの工場クラスを呼び出して対応するメールの属性,例えばfrom,to,cc,subject,text,あるいはメッセージオブジェクト2を伝達するだけでメール添付ファイルの中国語チップ問題を解決する3チェーンスタイル4をサポートする複数のメッセージ(text,html,img,file)を混合送信することができる
二工程写真
Commons: 封装Apache Commons Email简化邮件发送_第2张图片
パッケージされたjar:emailを使用することもできますcommons.util.jar
Commons: 封装Apache Commons Email简化邮件发送_第3张图片添付ファイルを参照
三呼び出し説明
1テキストメッセージの送信
 //            
//            
		MailMessageFactory mms = new MailMessageFactory();
		mms.setSubject("  Apache Commons Email     ").setText("        ").send();

2添付ファイルを含むメッセージの送信

MailMessageFactory mms = new MailMessageFactory(SendMailType.FILE);
		mms.setSubject("  Apache Commons Email            ").setText("    ")
		.setEmailAttachment("  .jpg","    ","c:\\4.jpg").send();

3 Html形式メッセージの送信

MailMessageFactory mms = new MailMessageFactory(SendMailType.HTML);		
		String html = "<html><head><meta http-equiv='content-type' content='text/html; charset=GBK'>"
			+ "</head><body><h1>  Apache Commons Email     </h1><img src=\"cid:img0\"><br><img src=\"cid:img1\"></body></html>";		
		mms.setSubject("  Apache Commons Email         ")
		.setEmailAttachment("  .jpg","    ","c:\\4.jpg")
		.setEmailHtmlImgAttachment("  2.jpg","    2","img0","c:\\5.jpg")
		.setEmailHtmlImgUrl("apache.jpg",null, "img1","http://www.apache.org/images/asf_logo_wide.gif")
		.setHtmlText(html)		
		.send();

四コードは以下の通りです.
1メッセージ送信クラス:MailMessageFactory

package net.liuzd.email.commons;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import javax.mail.MessagingException;
import javax.mail.internet.MimeUtility;

import net.liuzd.email.EmailEntity;

import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

/**
 * Title: Description: Copyright: Copyright (c) 2011
 * Company:http://liuzidong.iteye.com/ Makedate:2011-7-5   02:23:49 
 * @author liuzidong
 * @version 1.0
 * @since 1.0
 * 
 */
public class MailMessageFactory {

	private Email email;
	private SendMailType sendMailType;
	private SendMessage sendMessage;
	private static final String ENCODING = EmailEntity.EMAIL_ENCODING;

	/**
	 *          
	 */
	public MailMessageFactory() {
		this(SendMailType.TEXT);
	}

	public MailMessageFactory(SendMailType sendMailType) {

		this.sendMailType = sendMailType;
		sendMessage = new SendMessage();

		switch (this.sendMailType) {
		case TEXT:
			email = new SimpleEmail();
			break;
		case HTML:
			email = new HtmlEmail();
			break;		
		case FILE:
			email = new MultiPartEmail();
		}
		
		//        
		email.setHostName(EmailEntity.EMAIL_HOST);
		email.setAuthentication(EmailEntity.EMAIL_USERNAME,EmailEntity.EMAIL_PASSWORD);
		email.setCharset(ENCODING); //   

	}

	/**
	 * @param to           
	 * @return
	 */
	public MailMessageFactory setTo(String to) {
		sendMessage.setTo(to);
		return this;
	}	

	/**      */
	public MailMessageFactory setSubject(String subject) {
		sendMessage.setSubject(subject);
		return this;
	}

	/**      */
	public MailMessageFactory setText(String text) {
		sendMessage.addText(text);
		return this;
	}
	
	public MailMessageFactory setHtmlText(String htmlText) {
		sendMessage.addHtmlText(htmlText);
		return this;
	}
	

	/**
	 *       
	 * @param attachMentName         Email     
	 * @param description             	
	 * @param file                       
	 * @return
	 */
	public MailMessageFactory setEmailAttachment(String attachMentName,String description,String filePath){			
		try {
			sendMessage.addFile(MailType.FILE, MimeUtility.encodeWord(attachMentName),description,null,filePath);
		} catch (UnsupportedEncodingException e) {			
			e.printStackTrace();
		}			
		return this;
	}	
	
	
	/**
	 *    Email  Html         
	 * */
	public MailMessageFactory setEmailHtmlImgAttachment(String attachMentName,String description,String cldName,String filePath){			
		try {
			sendMessage.addFile(MailType.IMG, MimeUtility.encodeWord(attachMentName),description,cldName,filePath);
		} catch (UnsupportedEncodingException e) {			
			e.printStackTrace();
		}			
		return this;
	}	
	
	/**
	 *    Email  Html         
	 * */
	public MailMessageFactory setEmailHtmlImgUrl(String attachMentName,String description,String cldName,String url){			
		try {
			sendMessage.addFile(MailType.URL, MimeUtility.encodeWord(attachMentName),description,cldName,url);
		} catch (UnsupportedEncodingException e) {			
			e.printStackTrace();
		}			
		return this;
	}

	public void send(){
		
		//             
        String  to = sendMessage.getTo();  
        if(null == to || to.length() == 0){  
            to = EmailEntity.EMAIL_TO;  
            sendMessage.setTo(to);  
        }           
        String subject = sendMessage.getSubject();  
        if(null != subject && !"".equals(subject)){  
            email.setSubject(subject);  
        }            
        try {       
        	
			email.addTo(sendMessage.getTo());
			email.setFrom(EmailEntity.EMAIL_FROM);		
			
			 
	        String text = sendMessage.getEmailText();  
	        if(null != text && !"".equals(text)){  
	        	 //         UTF-8, buildMimeMessage           
	        	try {
					email.getMimeMessage().setText(text,ENCODING);
				} catch (MessagingException e) {					
					e.printStackTrace();
				} 
	        	//email.setMsg(text);	        	
	        }     
	        
	        String html = sendMessage.getEmailHtmlText();	       	        
	        //    
	        List<SendMessage> lists = sendMessage.getImages();	        
	        EmailAttachment attachment = null;
	        String filePath = null;
	        String imgName = null;
	        for(SendMessage entity : lists){
	        	filePath = entity.getFilePath();	
	        	String clidName = entity.getCitName();
	        	imgName = entity.getImgName();
	        	if(entity.getMailType() == MailType.FILE){
	        		attachment = new EmailAttachment();
	        		attachment.setPath(filePath);
	        		attachment.setDisposition(EmailAttachment.ATTACHMENT);
	        		attachment.setDescription(entity.getDescription());
	        		attachment.setName(entity.getImgName());
	        		((MultiPartEmail)email).attach(attachment);
	        	}else if(entity.getMailType() == MailType.IMG){	        		
	        		File file = new File(filePath);
	        		imgName = entity.getImgName();
	        		String cid = ((HtmlEmail) email).embed(file, MimeUtility.encodeText(imgName));
					//        html      clid
	        		html = html.replace(clidName, cid);	    
	        	}else if(entity.getMailType() == MailType.URL){	        		
	        		URL url = new URL(filePath);					
	        		imgName = entity.getImgName();
	        		String cid = ((HtmlEmail) email).embed(url, MimeUtility.encodeText(imgName));
	        		html = html.replace(clidName, cid);			        		
	        	}
	        }	        
	        
	        if(sendMailType != SendMailType.TEXT){  
	        	 if(null != html && !"".equals(html) && sendMailType == SendMailType.HTML){  
	        		 System.out.println("HTML: "+html);
	        		 ((HtmlEmail)email).setHtmlMsg(html);
	        	 }
	        }	        
	        
	        long startTime = System.currentTimeMillis();  
	        email.send();
	        long endTime = System.currentTimeMillis();  
	        System.out.println(sendMailType + "  !,    : " + (endTime - startTime)+"  !");
	        
        } catch (MalformedURLException e) {			
			e.printStackTrace();	       
    	} catch (UnsupportedEncodingException e) {			
			e.printStackTrace();    
		} catch (EmailException e) {			
			e.printStackTrace();
		}    		
	}	
}


2メッセージ・オブジェクト:SendMessage

public class SendMessage {
	
	private String  to;
	private String subject;
	private String description;
	private String citName;
	
	private String imgName;
	private String filePath;
	private MailType mailType; 	
	
	private String form;
	
	private List<String> texts = new ArrayList<String>();
	private List<String> htmlTexts = new ArrayList<String>();	
	
	//    
	private List<SendMessage> images = new ArrayList<SendMessage>();
	
	public MailType getMailType() {
		return mailType;
	}


	public void setMailType(MailType mailType) {
		this.mailType = mailType;
	}


	public void addFile(MailType mailType,String imgName,String description,String citName,String filePath){
		images.add(new SendMessage(mailType,imgName,description,citName,filePath));
	}	
	
	
	public void addText(String text){
		texts.add(text);
	}
	
	public void addHtmlText(String htmlText){
		htmlTexts.add(htmlText);
	}
	

	
	public SendMessage(MailType mailType,String imgName,String description,String citName,String filePath) {
		super();
		this.mailType =  mailType;
		this.imgName = imgName;
		this.description = description;
		this.citName = citName;
		this.filePath = filePath;
	}



	public List<SendMessage> getImages() {
		return images;
	}
	public void setImages(List<SendMessage> images) {
		this.images = images;
	}
	public String getForm() {
		return form;
	}
	public void setForm(String form) {
		this.form = form;
	}
	public String getImgName() {
		return imgName;
	}
	public void setImgName(String imgName) {
		this.imgName = imgName;
	}
	
	public String getTo() {
		return to;
	}
	public void setTo(String to) {
		this.to = to;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {		
		this.subject = subject;
	}
	
	public SendMessage() {
		
	}
	public SendMessage(String to, String subject, String text) {
		super();
		this.to = to;
		this.subject = subject;
		addText(text);
	}
	
	
	
	@Override
	public String toString() {		
		return new StringBuilder()
		.append("     : ").append(to)
		.append(",     : ").append(form)
		.append(",    : ").append(subject)
		.append(",    : ").append(getEmailText())
		.append(",      : ").append(getEmailHtmlText())
		.toString();
	}
	
	
	public String getEmailText(){
		StringBuilder sbr = new StringBuilder();
		List<String> list = getTexts();
		for(String text : list){
			sbr.append(text);
		}
		return sbr.toString();
	}
	
	public String getEmailHtmlText(){
		StringBuilder sbr = new StringBuilder();
		List<String> list = getHtmlTexts();
		for(String text : list){
			sbr.append(text);
		}
		return sbr.toString();
	}


	public List<String> getTexts() {
		return texts;
	}


	public void setTexts(List<String> texts) {
		this.texts = texts;
	}


	public List<String> getHtmlTexts() {
		return htmlTexts;
	}


	public void setHtmlTexts(List<String> htmlTexts) {
		this.htmlTexts = htmlTexts;
	}


	public String getDescription() {
		return description;
	}


	public void setDescription(String description) {
		this.description = description;
	}


	public String getCitName() {
		return citName;
	}


	public void setCitName(String citName) {
		this.citName = citName;
	}


	public String getFilePath() {
		return filePath;
	}


	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}	
	
}

3 MailType.java

public enum MailType {	
	/**
	 *     
	 * */
	IMG,
	/**
	 *     
	 * */
	FILE,
	/**
	 *     
	 * */
	URL;

	@Override
	public String toString() {
		String message = null;
		switch (this) {		
		case IMG :
			message = ",    ";
		case URL :
			message = ",      ";
		default:
			message = ",    ";
			break;
		}
		return message;
	}
}

4 SendMailType.java

public enum SendMailType {
	/**
	 *     
	 * */
	TEXT,
	
	/**
	 *        
	 * */
	FILE,
	
	/**
	 * HTML  ,              
	 * **/
	HTML;
	

	@Override
	public String toString() {
		String message = null;
		switch (this) {
		case TEXT:
			message = "      ";
			break;
		case FILE:
			message = "      ";
			break;	
		case HTML :
			message = "  html  ";	
			break;
		}
		return message;
	}
}

5その他のクラスはSを参照
pringのEmail<一般的な4種類のEmailを送信する方法(TEXT,HTML,IMG,FILE)>をカプセル化しています.
http://liuzidong.iteye.com/blog/1114783