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;
}
}
}
分享到:
相关推荐
1. **邮件组件**:Apache Commons Mail 提供了多个预定义的邮件组件,如 `SimpleEmail`、`MultiPartEmail` 和 `HtmlEmail`,分别用于发送纯文本、多部分(混合内容,如文本和附件)以及HTML格式的邮件。 2. **SMTP...
总结一下,Apache Commons提供的这套jar包是Java开发者的重要资源,涵盖了从基本的I/O操作到复杂的网络通信和电子邮件发送等各个领域。它们通过提供预包装的功能,提高了开发效率,降低了出错的可能性,是任何Java...
Apache Commons是Java开发中不可或缺的一部分,它提供了一系列实用的工具类和组件,极大地丰富了Java标准库的功能。这个工具集包含了许多模块,每个模块都专注于特定的编程任务,旨在简化和优化开发流程。以下是一些...
5. **Apache Commons Net**: 提供了一系列与网络相关的类,如 FTP 客户端、SMTP 邮件发送、TCP 连接和 URL 处理等。这对于需要进行网络通信的应用程序非常有用。 6. **Apache Commons Codec**: 包含了多种编码和...
- **简介**:Apache Commons Email 是一个用于创建和发送电子邮件的库,它基于 JavaMail API 提供了一层更简洁的接口。 - **功能**:支持发送纯文本邮件、带有附件的纯文本邮件以及包含 HTML 内容的邮件。 - **...
除了上述组件,Apache Commons 还包括许多其他实用库,如 Commons Codec(编码解码工具)、Commons CLI(命令行接口解析)、Commons Configurations(配置文件处理)等,涵盖了网络、XML 处理、数学计算、缓存、邮件...
Apache Commons 是一个由Apache软件基金会开发的Java库项目,它为Java程序员提供了大量实用的工具类和组件,极大地简化了日常编程任务。这个压缩包包含了Apache Commons项目中的多个公共jar包,总计17个,这可能包括...
11. **Commons Email**: 提供了一个简单的邮件发送API,可以轻松地发送HTML或纯文本邮件,支持附件和多部分消息。 12. **Commons Exec**: 用于执行外部程序并管理其生命周期,提供了更强大的控制和错误处理。 在...
8. **Email**: 提供了发送电子邮件的功能,封装了JavaMail API,使得邮件发送变得更加简单。 9. **FileUpload**: 实现了HTTP文件上传功能,可以处理多部分的POST请求,便于在Web应用中接收用户上传的文件。 10. **...
接下来,我们将深入探讨如何使用Apache Commons Email来实现邮件的发送。 1. **Apache Commons Email简介** Apache Commons Email是Apache软件基金会开发的一个组件,属于Apache Commons项目的一部分。它提供了一组...
这个压缩包包含的是 Apache Commons 源码,对于想要深入理解 Commons 包内各种组件工作原理、提升编程技能或者进行二次开发的开发者来说,这是一个宝贵的资源。 Apache Commons 项目包含多个模块,每个模块专注于...
在实际应用中,使用Apache Commons Email组件发送邮件时,你需要: - **配置邮件服务器**: 首先,你需要一个支持SMTP(Simple Mail Transfer Protocol)的邮件服务器,如163提供的smtp.163.com。此外,还需要一个...
在实际开发中,除了直接使用Java Mail API,还可以选择一些成熟的Java邮件发送库,例如Apache Commons Email、Spring Framework的MailSender接口等,它们提供了更友好的API和额外的特性,可以帮助开发者快速实现邮件...
JavaMail和Apache Commons Email是Java平台上用于发送电子邮件的两个重要库。这两个库为开发者提供了方便的API,使得在Java应用程序中实现邮件发送功能变得简单易行。以下将详细阐述这两个库以及它们所需的jar包。 ...
Apache Commons 是一系列小型 Java 库的集合,它们提供了许多实用工具和组件,为开发者提供了方便的功能,以增强标准 Java API 的能力。以下是根据标题、描述和部分内容列出的一些关键知识点: 1. **Codec** 包:这...
Apache Commons Email 是一个Java库,专门用于简化电子邮件的创建和发送。这个压缩包"commons-email-1.1.rar"包含了该库的两个关键组件:源代码(src)和已编译的jar文件。 1. **Apache Commons Email 概述** ...
Apache Commons是Apache软件基金会的一个项目,旨在提供一系列高质量、可重用的Java组件,这些组件可以帮助开发者解决常见的编程任务,提高开发效率。这个压缩包很可能包含了多个Apache Commons子项目的JAR文件,每...
在Java Web开发中,根据具体需求选择合适的Apache Commons组件,可以大大提升代码的简洁性和可维护性。使用这些工具类时,应确保正确引入对应的jar包,并注意版本兼容性,避免与其他库冲突。同时,了解并掌握这些...
《Apache Commons Email 1.4:企业级邮件发送利器》 Apache Commons Email 是Apache软件基金会下的一个组件,属于Apache Commons项目的一部分。这个组件的核心功能是为Java开发者提供了一个简单、强大的API来创建和...
Apache Commons Email 是一个Java库,专门用于简化电子邮件的创建和发送。这个库是Apache Commons项目的一部分,它提供了许多高级功能,使得开发人员可以方便地处理复杂的邮件操作,而不需要直接与JavaMail API进行...