`

使用apache commons组件发送邮件

阅读更多
package com.sf.novatar.plf.utils;

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

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeUtility;
import javax.servlet.ServletContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.MultiPartEmail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.sf.novatar.context.AppContext;
import com.sf.novatar.plf.bean.MailCommBean;

public class MailCommon extends Exception {

	/**
	 *
	 */
	private static final long serialVersionUID = 768194185976826713L;
	
	private final static Logger logger = LoggerFactory.getLogger(MailCommon.class);

	final public static int SIMPLE_MAIL = 0;

	final public static int MUTIL_MAIL = 1;

	/** 发件方式 - 普通发送 */
	final public static int TO = 0;

	/** 发件方式 - 抄送 */
	final public static int CC = 1;
	/** 发件方式 - 抄送人邮件地址 */
	private String addChaoSong = null;

	/** 发件方式 - 密件抄送 */
	final public static int BCC = 2;

	private int mailType = 0;

	/** 邮件内容 */
	private String mailContent = null;

	/** 邮件相关信息 - SMTP 服务器 */
	private String mailSMTPHost = null;

	private String mailSMTPHostPort = "25";

	/** 邮件相关信息 - 邮件用户名 */
	private String mailUser = null;

	/** 邮件相关信息 - 密码 */
	private String mailPassword = null;

	/** 邮件相关信息 - 发件人邮件地址 */
	private String mailFromAddress = null;

	/** 邮件相关信息 - 邮件主题 */
	private String mailSubject = "";

	/** 邮件相关信息 - 邮件发送地址 */
	private String[] mailTOAddress = null;

	/** 邮件相关信息 - 邮件抄送地址 */
	private String[] mailCCAddress = null;

	/** 邮件相关信息 - 邮件密件抄送地址 */
	private String[] mailBCCAddress = null;

	/** 邮件相关信息 - 邮件正文(复合结构) */
	private javax.mail.internet.MimeMultipart mailBody = null;

	private MultiPartEmail mailclass = null;

	private boolean debug = false;

	private boolean result = false;
	
	/** 邮件相关信息 - 邮件發送方顯示名 */
	private String mailShowName = "SF Express";
	
	
	private Log log = LogFactory.getLog(MailCommon.class);

	public boolean isDebug() {
		return debug;
	}

	public void setDebug(boolean debug) {
		this.debug = debug;
	}

	public MailCommon() {
		mailBody = new javax.mail.internet.MimeMultipart();
	}

	/**
	 * 设置 SMTP 服务器
	 *
	 * @param strSMTPHost
	 *            邮件服务器名称或 IP
	 * @param strUser
	 *            邮件用户名
	 * @param strPassword
	 *            密码
	 */
	public void setSMTPHost(String strSMTPHost, String port, String strUser,
			String strPassword) {
		this.mailSMTPHost = strSMTPHost;
		this.mailUser = strUser;
		this.mailPassword = strPassword;
		if (port != null && !port.equals("")) {
			this.mailSMTPHostPort = port;
		}
	}

	/**
	 * 设置邮件发送地址
	 *
	 * @param strFromAddress
	 *            邮件发送地址
	 */
	public void setFromAddress(String strFromAddress) {
		this.mailFromAddress = strFromAddress;
	}
	
	/**
	 * 设置邮件发送地址
	 *
	 * @param strFromAddress
	 *            邮件发送地址
	 * @param mailShowName
	 *            邮件顯示名
	 */
	public void setFromAddress(String strFromAddress, String mailShowName) {
		this.mailFromAddress = strFromAddress;
		this.mailShowName = mailShowName;
	}

	/**
	 * 设置邮件目的地址
	 *
	 * @param strAddress
	 *            邮件目的地址列表, 不同的地址可用;号分隔
	 * @param iAddressType
	 *            邮件发送方式 (TO 0, CC 1, BCC 2) 常量已在本类定义
	 * @throws AddressException
	 */
	public void setAddress(String strAddress, int iAddressType)
			throws Exception {
		String[] mailAddr = strAddress.split(",");
		switch (iAddressType) {
		case MailCommon.TO: {
			mailTOAddress = mailAddr;
			break;
		}
		case MailCommon.CC: {
			mailCCAddress = mailAddr;
			break;
		}
		case MailCommon.BCC: {
			mailBCCAddress = mailAddr;
			break;
		}
		}
	}

	/**
	 * 设置邮件主题
	 *
	 * @param strSubject
	 *            邮件主题
	 */
	public void setSubject(String strSubject) {
		this.mailSubject = strSubject;
	}

	/**
	 * 设置邮件文本正文
	 *
	 * @param strTextBody
	 *            邮件文本正文
	 * @throws MessagingException
	 */
	public void setTextBody(String strTextBody) throws Exception {
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setText(strTextBody, "UTF-8");
		mailBody.addBodyPart(mimebodypart);
		mailContent = strTextBody;
	}

	/**
	 * 设置邮件超文本正文
	 *
	 * @param strHtmlBody
	 *            邮件超文本正文
	 * @throws MessagingException
	 */
	public void setHtmlBody(String strHtmlBody) throws Exception {
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setDataHandler(new DataHandler(strHtmlBody,
				"text/html;charset=UTF-8"));
		mailBody.addBodyPart(mimebodypart);
		mailContent = strHtmlBody;
	}

	/**
	 * 设置邮件正文外部链接 URL, 信体中将包含链接所指向的内容
	 *
	 * @param strURLAttachment
	 *            邮件正文外部链接 URL
	 * @throws MessagingException
	 * @throws MalformedURLException
	 */
	public void setURLAttachment(String strURLAttachment) throws Exception {
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setDataHandler(new DataHandler(new URL(strURLAttachment)));
		mailBody.addBodyPart(mimebodypart);
		this.mailType = MUTIL_MAIL;
	}

	/**
	 * 设置邮件附件
	 *
	 * @param strFileAttachment
	 *            文件的全路径
	 * @throws MessagingException
	 * @throws UnsupportedEncodingException
	 */
	public void setFileAttachment(String strFileAttachment) throws Exception {
		File path = new File(strFileAttachment);
		if (!path.exists() || path.isDirectory()) {
			throw new Exception("文件不存在!");
		}
		String strFileName = path.getName();
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setDataHandler(new DataHandler(new FileDataSource(
				strFileAttachment)));
		mimebodypart.setFileName(MimeUtility.encodeText(strFileName));
		mailBody.addBodyPart(mimebodypart);
		this.mailType = MUTIL_MAIL;
	}

	/**
	 * 设置邮件图片附件
	 *
	 * @param strFileAttachment
	 *            文件的全路径
	 * @throws MessagingException
	 * @throws UnsupportedEncodingException
	 */
	public void setImgFileAttachment(String strFileAttachment, String fileNum)
			throws Exception {
		File path = new File(strFileAttachment);
		if (!path.exists() || path.isDirectory()) {
			throw new Exception("文件不存在!");
		}
		String strFileName = path.getName();
		MimeBodyPart mimebodypart = new MimeBodyPart();
		mimebodypart.setDataHandler(new DataHandler(new FileDataSource(
				strFileAttachment)));
		mimebodypart.setFileName(MimeUtility.encodeText(strFileName));
		mailBody.setSubType("related");
		mimebodypart.setHeader("Content-ID", "IMG" + fileNum);
		mailBody.addBodyPart(mimebodypart);
		this.mailType = MUTIL_MAIL;
	}

	/**
	 * 邮件发送(一次发送多个地址, 优点速度快, 但是有非法邮件地址时将中断发送操作)
	 *
	 * @throws MessagingException
	 */
	public void sendBatch() throws Exception {

		mailclass = new MultiPartEmail();
		mailclass.setDebug(this.debug);
	try{
		if (mailTOAddress != null) {
			for (int i = 0; i < this.mailTOAddress.length; i++) {
				mailclass.addTo(mailTOAddress[i]);
			}
		}
		if (mailCCAddress != null) {
			for (int i = 0; i < this.mailCCAddress.length; i++) {
				mailclass.addCc(mailCCAddress[i]);
			}
		}
		if (mailBCCAddress != null) {
			for (int i = 0; i < this.mailBCCAddress.length; i++) {
				mailclass.addBcc(mailBCCAddress[i]);

			}
		}

		mailclass.setHostName(this.mailSMTPHost);
		mailclass.setSmtpPort(Integer.parseInt(this.mailSMTPHostPort));

		//設置郵箱显示名
		if(this.mailShowName != null ){
			mailclass.setFrom(this.mailFromAddress, this.mailShowName);
		}else{
			mailclass.setFrom(this.mailFromAddress, this.mailUser);
		}
//设置是否验证用户名和密码
// 		mailclass.setAuthentication(this.mailUser, this.mailPassword);

		mailclass.setSubject(this.mailSubject);
		if (SIMPLE_MAIL == mailType) {
			mailclass.setCharset("UTF-8");
			mailclass.setMsg(mailContent);
		} else {
			mailclass.setContent(mailBody);
		}
		// 增加需要回执的标记
		mailclass.addHeader("Disposition-Notification-To", "1");
		mailclass.send();
		result = true;
	}catch(Exception e){
		log.error("发件箱: " + this.mailFromAddress + "用户名: " + this.mailUser + "密码: " + this.mailPassword);
		throw new Exception();
	}
		if (result) {
			System.out.println("已向下列邮箱发送了邮件");
			if (mailTOAddress != null) {
				for (int i = 0; i < mailTOAddress.length; i++) {
					System.out.println(mailTOAddress[i]);
				}
			}
			if (mailCCAddress != null) {
				for (int i = 0; i < mailTOAddress.length; i++) {
					System.out.println(mailCCAddress[i]);
				}
			}
			if (mailBCCAddress != null) {
				for (int i = 0; i < mailTOAddress.length; i++) {
					System.out.println(mailBCCAddress[i]);
				}
			}
		}
	}
	
	/**
	 * 邮件发送(不需要回执,且返回发送结果)
	 * @return boolean 返回结果
	 * @throws MessagingException
	 */
	public boolean send() throws Exception {
		mailclass = new MultiPartEmail();
		mailclass.setDebug(this.debug);
		if (mailTOAddress != null) {
			for (int i = 0; i < this.mailTOAddress.length; i++) {
				mailclass.addTo(mailTOAddress[i]);
			}
		}
		if (addChaoSong != null) {
			String[] mailAddr = addChaoSong.split(",");
			for (int i = 0; i < mailAddr.length; i++) {
				mailclass.addCc(mailAddr[i]);
			}
		}
		mailclass.setHostName(this.mailSMTPHost);
		mailclass.setSmtpPort(Integer.parseInt(this.mailSMTPHostPort));
		//設置郵箱显示名
		if(this.mailShowName != null ){
			mailclass.setFrom(this.mailFromAddress, this.mailShowName);
		}else{
			mailclass.setFrom(this.mailFromAddress, this.mailUser);
		}
		
//		mailclass.setAuthentication(this.mailUser, this.mailPassword);
		mailclass.setSubject(this.mailSubject);
		if (SIMPLE_MAIL == mailType) {
			mailclass.setCharset("UTF-8");
			mailclass.setMsg(mailContent);
		} else {
			mailclass.setContent(mailBody);
		}
		// 不需要回执的标记
		mailclass.send();
		result = true;
		
		return result;
	}
	
	public String getMailContent() {
		return mailContent;
	}

	public void setMailContent(String mailContent) {
		this.mailContent = mailContent;
	}

	public Email getMailclass() {
		return mailclass;
	}

	public void setMailclass(MultiPartEmail mailclass) {
		this.mailclass = mailclass;
	}

	public int getMailType() {
		return mailType;
	}

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

	public String getMailShowName() {
		return mailShowName;
	}

	public void setMailShowName(String mailShowName) {
		this.mailShowName = mailShowName;
	}

	public String getAddChaoSong() {
		return addChaoSong;
	}

	public void setAddChaoSong(String addChaoSong) {
		this.addChaoSong = addChaoSong;
	}
	
	/**邮件发送通用方法
	 * @author sfit1092
	 * @param mailHost
	 * @param fromMailAddr
	 * @param fromMailUser
	 * @param fromMailPwd
	 * @param filePath
	 * @param contentHTML
	 * @param title
	 * @param reciveAddress(多个联系人用","分隔)
	 * @return
	 */
	/*public static boolean sentMail(String mailHost, String fromMailAddr, String fromMailUser, String fromMailPwd, String filePath, String contentHTML, String title, String reciveAddress) {
		try {
			MailCommon mail = new MailCommon();
			mail.setAddress(reciveAddress.trim(), MailCommon.TO);
			mail.setFromAddress(fromMailAddr);
			mail.setSMTPHost(mailHost, null, fromMailUser, fromMailPwd);
			if (!"".equals(filePath)) {
				mail.setFileAttachment(filePath);
			} else {
				mail.setMailType(1);
			}
			mail.setSubject(new String(title.getBytes("UTF-8"), "UTF-8"));
			mail.setHtmlBody(contentHTML);
			mail.send();
			return true;
		} catch (Exception e) {
			logger.error("邮件发送异常!");
			return false;
		}
	}*/
	public static boolean sentMail(String toAddress, String title, String htmlContent, String filePath) {
		ServletContext ctx = AppContext.getContext().getServletContext();
		String mailHost = ctx.getAttribute("mail.host")==null?"":ctx.getAttribute("mail.host").toString();
		String mailAddress = ctx.getAttribute("mail.address")==null?"":ctx.getAttribute("mail.address").toString();
//		String mailUser = ctx.getAttribute("mail.user")==null?"":ctx.getAttribute("mail.user").toString();
//		String mailPassword = ctx.getAttribute("mail.password")==null?"":ctx.getAttribute("mail.password").toString();
		String mailUser = com.sf.novatar.context.AppContext.getContext().getConfigProperties().getProperty("mail.user");
		String mailPassword = com.sf.novatar.context.AppContext.getContext().getConfigProperties().getProperty("mail.password");
		
		MailCommon mail = new MailCommon();
		mail.mailUser = mailUser;
		mail.mailPassword = mailPassword;
		try {
			mail.setAddress(toAddress.trim(), MailCommon.TO);
			mail.setFromAddress(mailAddress);
			mail.setSMTPHost(mailHost, null, mailUser, mailPassword);
			if (!"".equals(filePath)) {
				mail.setFileAttachment(filePath);
			} else {
				mail.setMailType(1);
			}
			mail.setSubject(new String(title.getBytes("UTF-8"), "UTF-8"));
			mail.setHtmlBody(htmlContent);
			mail.send();
			return true;
		} catch (Exception e) {
			logger.error("邮件发送异常!"+e.getLocalizedMessage());
			return false;
		}
	}
}
分享到:
评论

相关推荐

    Apache Commons Mail 封装发送邮件类

    1. **邮件组件**:Apache Commons Mail 提供了多个预定义的邮件组件,如 `SimpleEmail`、`MultiPartEmail` 和 `HtmlEmail`,分别用于发送纯文本、多部分(混合内容,如文本和附件)以及HTML格式的邮件。 2. **SMTP...

    apache.commons全套jar包下载

    总结一下,Apache Commons提供的这套jar包是Java开发者的重要资源,涵盖了从基本的I/O操作到复杂的网络通信和电子邮件发送等各个领域。它们通过提供预包装的功能,提高了开发效率,降低了出错的可能性,是任何Java...

    Apache Commons工具集

    Apache Commons是Java开发中不可或缺的一部分,它提供了一系列实用的工具类和组件,极大地丰富了Java标准库的功能。这个工具集包含了许多模块,每个模块都专注于特定的编程任务,旨在简化和优化开发流程。以下是一些...

    org.apache.commons jar

    5. **Apache Commons Net**: 提供了一系列与网络相关的类,如 FTP 客户端、SMTP 邮件发送、TCP 连接和 URL 处理等。这对于需要进行网络通信的应用程序非常有用。 6. **Apache Commons Codec**: 包含了多种编码和...

    Apache Commons 包的使用

    - **简介**:Apache Commons Email 是一个用于创建和发送电子邮件的库,它基于 JavaMail API 提供了一层更简洁的接口。 - **功能**:支持发送纯文本邮件、带有附件的纯文本邮件以及包含 HTML 内容的邮件。 - **...

    org.apache.commons 全部包

    除了上述组件,Apache Commons 还包括许多其他实用库,如 Commons Codec(编码解码工具)、Commons CLI(命令行接口解析)、Commons Configurations(配置文件处理)等,涵盖了网络、XML 处理、数学计算、缓存、邮件...

    Apache Commons 公共jar包

    Apache Commons 是一个由Apache软件基金会开发的Java库项目,它为Java程序员提供了大量实用的工具类和组件,极大地简化了日常编程任务。这个压缩包包含了Apache Commons项目中的多个公共jar包,总计17个,这可能包括...

    org.apache.commons

    11. **Commons Email**: 提供了一个简单的邮件发送API,可以轻松地发送HTML或纯文本邮件,支持附件和多部分消息。 12. **Commons Exec**: 用于执行外部程序并管理其生命周期,提供了更强大的控制和错误处理。 在...

    Apache Commons 工具类介绍及简单使用.pdf

    8. **Email**: 提供了发送电子邮件的功能,封装了JavaMail API,使得邮件发送变得更加简单。 9. **FileUpload**: 实现了HTTP文件上传功能,可以处理多部分的POST请求,便于在Web应用中接收用户上传的文件。 10. **...

    Java发送邮件 --- Apache Commns email

    接下来,我们将深入探讨如何使用Apache Commons Email来实现邮件的发送。 1. **Apache Commons Email简介** Apache Commons Email是Apache软件基金会开发的一个组件,属于Apache Commons项目的一部分。它提供了一组...

    Apache Commons source

    这个压缩包包含的是 Apache Commons 源码,对于想要深入理解 Commons 包内各种组件工作原理、提升编程技能或者进行二次开发的开发者来说,这是一个宝贵的资源。 Apache Commons 项目包含多个模块,每个模块专注于...

    Apache mail实例

    在实际应用中,使用Apache Commons Email组件发送邮件时,你需要: - **配置邮件服务器**: 首先,你需要一个支持SMTP(Simple Mail Transfer Protocol)的邮件服务器,如163提供的smtp.163.com。此外,还需要一个...

    java邮件发送组件

    在实际开发中,除了直接使用Java Mail API,还可以选择一些成熟的Java邮件发送库,例如Apache Commons Email、Spring Framework的MailSender接口等,它们提供了更友好的API和额外的特性,可以帮助开发者快速实现邮件...

    Java Mail和Commons-email发简单的邮件所用到的jar包

    JavaMail和Apache Commons Email是Java平台上用于发送电子邮件的两个重要库。这两个库为开发者提供了方便的API,使得在Java应用程序中实现邮件发送功能变得简单易行。以下将详细阐述这两个库以及它们所需的jar包。 ...

    apache commons笔记1

    Apache Commons 是一系列小型 Java 库的集合,它们提供了许多实用工具和组件,为开发者提供了方便的功能,以增强标准 Java API 的能力。以下是根据标题、描述和部分内容列出的一些关键知识点: 1. **Codec** 包:这...

    commons-email-1.1.rar源文件及jar文件

    Apache Commons Email 是一个Java库,专门用于简化电子邮件的创建和发送。这个压缩包"commons-email-1.1.rar"包含了该库的两个关键组件:源代码(src)和已编译的jar文件。 1. **Apache Commons Email 概述** ...

    commons jar

    Apache Commons是Apache软件基金会的一个项目,旨在提供一系列高质量、可重用的Java组件,这些组件可以帮助开发者解决常见的编程任务,提高开发效率。这个压缩包很可能包含了多个Apache Commons子项目的JAR文件,每...

    commons相关jar

    在Java Web开发中,根据具体需求选择合适的Apache Commons组件,可以大大提升代码的简洁性和可维护性。使用这些工具类时,应确保正确引入对应的jar包,并注意版本兼容性,避免与其他库冲突。同时,了解并掌握这些...

    commons-email-1.4-bin

    《Apache Commons Email 1.4:企业级邮件发送利器》 Apache Commons Email 是Apache软件基金会下的一个组件,属于Apache Commons项目的一部分。这个组件的核心功能是为Java开发者提供了一个简单、强大的API来创建和...

    commons-email需要的几个包

    Apache Commons Email 是一个Java库,专门用于简化电子邮件的创建和发送。这个库是Apache Commons项目的一部分,它提供了许多高级功能,使得开发人员可以方便地处理复杂的邮件操作,而不需要直接与JavaMail API进行...

Global site tag (gtag.js) - Google Analytics