`

Commons: 封装Apache Commons Email简化邮件发送

 
阅读更多
参考资料
1 用Apache Commons Email简化邮件发送
http://www.blogjava.net/fastunit/archive/2008/01/25/177799.html
我测试时是用的是:新浪的邮箱:smtp.sina.com也是可以的
如下设置:

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.enable为true.


介绍

Commons Email封装了javamail,使用非常简单。
功能:简单文本邮件、带附件的邮件、HTML格式的邮件
官方首页:http://commons.apache.org/email/,目前最新版本是1.2
官方示例:http://commons.apache.org/email/userguide.html


工程环境:XP+Myeclipse6.5+JDK1.6

一 实现功能
1 封装了常用的四种发送Email的方法(文本,html,img,file),用户只要调用一个工厂类传递相应的邮件的属性如from, to,cc, subject,text,或者是消息对象
2 解决了发送邮件附件中的中文筹码问题
3 支持链式风格
4 可以混合发送多种消息(text,html,img,file)


二 工程图片

或者你也可以这样,使用打包好的jar:email.commons.util.jar
,见附件
三 调用说明
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<封装了常用的四种发送Email的方法(TEXT,HTML,IMG,FILE)>
http://liuzidong.iteye.com/blog/1114783
  • 大小: 26.9 KB
  • 大小: 30.4 KB
分享到:
评论

相关推荐

    Apache Commons Mail 封装发送邮件类

    这个库是对JavaMail API的一个方便的封装,简化了通过Java程序发送电子邮件的过程。在JavaMail中,配置和使用邮件服务可能相对复杂,而Apache Commons Mail则通过提供预定义的邮件实现和简单易用的接口来解决了这个...

    使用Apache-commons-email发送邮件

    总结一下,Apache Commons Email库为Java开发者提供了方便的邮件发送功能,简化了与SMTP服务器的交互。通过`SendMail.java`文件,我们可以学习到如何使用这个库来创建、配置和发送电子邮件,从而在项目中实现更高效...

    Apache commons-pool2-2.4.2源码学习笔记

    Apache Commons Pool2是Java开发中的一个对象池库,主要用于提高对象的重用效率,从而提升系统性能。在本文中,我们将深入探讨这个库的核心概念、设计模式以及如何通过源码学习来理解其工作原理。 首先,Apache ...

    org.apache.commons.beanutils.jar

    Apache Commons BeanUtils是Apache软件基金会的一个开源项目,它提供了一组实用工具类,用于简化JavaBean对象的操作。这个库的核心是`org.apache.commons.beanutils`包,其中包含了大量的辅助方法,使得开发者可以...

    使用javamail,commons-mail发送邮件实例

    `javamail`是一个强大的Java API,用于处理邮件服务器交互,而`commons-mail`是Apache Commons项目的一部分,提供了一个更简单的接口来发送邮件。 首先,我们需要了解`javamail`的核心概念。它主要涉及`Session`、`...

    edited: apache commons-compress 之tar压缩文件夹的示例

    Apache Commons Compress库是Java平台上的一个开源项目,专门用于处理各种不同的压缩格式,包括tar、gzip、bzip2等。这个库为开发者提供了一种简单、统一的方式来操作这些压缩格式,极大地简化了与压缩文件相关的...

    commons-io-2.11.0-bin.zip

    在描述中提到的"org.apache.commons.io.FileUtils"是Apache Commons IO中的一个关键类,它提供了大量静态方法来简化文件操作,如复制、移动、删除、读写文件等。以下是一些FileUtils类中的核心功能: 1. 文件复制:...

    apache,commons全包

    10. **Commons Email**: 支持发送电子邮件的工具类库,可以方便地构建和发送复杂格式的邮件。 以上只是Apache Commons部分模块的简介,实际上还有更多模块如DBUtils(数据库操作)、Codec(编码解码)、Exec(执行...

    commons-email-1.1-src.zip

    1. "美化签名.exe" - 这可能是一个用于创建或编辑电子邮件签名的可执行文件,可能与Apache Commons Email项目无关,但可以作为发送邮件时个性化和专业化的工具。 2. "commons-email-1.1-src" - 这可能是Apache ...

    commons-email-1.0

    Commons Emails 是 Apache Jakarta 项目的一部分,它是一个 Java 库,设计用于简化在 Java 应用程序中发送电子邮件的过程。这个库提供了丰富的功能,使得开发者能够更轻松地处理复杂的邮件构造和发送任务,而无需...

    commons-email

    "commons-email"是一个Java库,由Apache软件基金会开发并维护,用于简化电子邮件的创建和发送。这个库是Apache Commons项目的一部分,旨在提供一个强大的、易于使用的API,以便开发者能够高效地处理电子邮件相关的...

    commons-dbutils的再封装jar包

    commons-dbutils的再封装jar包,Blog文件的示例代码

    commons-eamil和commons-fileupload包

    `commons-email`是一个用于创建和发送电子邮件的Java库。它提供了一种简单且灵活的方式来构建和发送电子邮件,而无需深入了解JavaMail API的复杂性。这个库支持多种邮件服务,包括SMTP、SMTPS(安全SMTP)和EWS...

    commons-logging-1.2

    在标题中提到的 "commons-logging-1.2" 是这个库的一个特定版本,它包含了对常见日志框架的封装,使得开发者可以更方便地切换或集成不同的日志实现。 在描述中提到的问题 "java.lang.NoClassDefFoundError: org/...

    邮件发送工程类 封装了邮件发送

    在这个工程类中,可能使用了JavaMail API或类似库,如Apache Commons Email,它们提供了与SMTP服务器交互的接口,处理验证、加密和附件等复杂任务。下面将详细解释邮件发送的相关知识点: 1. **SMTP配置**:邮件...

    commons-dbutils-1.4.jar

    Apache Commons DBUtils是Apache软件基金会开发的一个开源项目,它提供了一套简洁、高效且实用的工具类,用于简化Java应用程序中的数据库操作。这个项目的最新版本为"commons-dbutils-1.4.jar",它的主要目标是减轻...

    Apache Jakarta Commons 使用手册

    ### Apache Jakarta Commons 使用手册知识点详解 #### 一、概述 《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为...

    commons_mail.jar

    Apache Commons Email是一个强大的Java库,专门用于简化电子邮件的发送。标题中的"commons_mail.jar"是这个库的可执行JAR文件,它包含了Apache Commons Email项目的核心功能。这个库是Apache软件基金会开发的,是对...

    common email 附件发送

    `commons-email-1.2.jar`是Apache Commons Email库的一部分,它提供了一个高级接口来简化Java中的电子邮件发送。这个库包含了创建、配置和发送电子邮件的所有必要功能,包括添加附件、设置主题、正文以及处理抄送和...

Global site tag (gtag.js) - Google Analytics