MailDao.java
package mail.dao;
import mail.domain.MailBean;
public interface MailDao {
Boolean send(MailBean mail);
}
MailJdbcDao.java
package mail.jdbc;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import mail.dao.MailDao;
import mail.domain.MailBean;
import mail.util.characterset;
public class MailJdbcDao implements MailDao {
private static MailJdbcDao mjd;
private Log log = LogFactory.getLog(this.getClass().getName());
public MailJdbcDao() {
super();
}
/** 单例模式 */
public static MailJdbcDao getInstance() {
if (mjd == null)
mjd = new MailJdbcDao();
return mjd;
}
/** 发送邮件具体方法 */
public Boolean send(MailBean mail) {
/** 创建session中所需要的Properties对象 */
Properties props = System.getProperties();
props.put("mail.smtp.host", mail.getMailServer());
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.timeout", 2500);
/** 创建邮件会话对象session */
AuthenticatorImpl authenticatorImpl = new AuthenticatorImpl();
authenticatorImpl.setName(mail.getMailUserName());
authenticatorImpl.setPassword(mail.getMailPassword());
Session mailSession = Session.getInstance(props,
authenticatorImpl);
/** 构造MimeMessage<实际发送的电子邮件信息>,并设定基本的值 */
MimeMessage message = new MimeMessage(mailSession);
try {
/** 设置发件人 */
message.setFrom(new InternetAddress(mail.getAddresser()));
/** 设置收件人 : 多个收件人 */
ArrayList<String> list = mail.getAddressee();
InternetAddress[] address = new InternetAddress[list.size()];
for (int i = 0; i < list.size(); i++) {
address[i] = new InternetAddress(list.get(i));
}
message.setRecipients(Message.RecipientType.TO, address);
/** 设置抄送人 */
list = mail.getAddresseeByCC();
if (list.size() > 0) {
address = new InternetAddress[list.size()];
for (int i = 0; i < list.size(); i++) {
address[i] = new InternetAddress(list.get(i));
}
message.setRecipients(Message.RecipientType.CC, address);
}
/** 设置邮件主题 : 编码 */
// message.setSubject(mail.getMailSubject());
message.setSubject(new String(mail.getMailSubject().getBytes(
"ISO-8859-1")), "GBK");
/** 构造Multipart : 该类是用于保存电子邮件内容的容器 :定义了添加、删除、获得电子邮件内容的方法 */
Multipart mp = new MimeMultipart();
/** 设置邮件的正文信息,并添加正文 : 编码 */
MimeBodyPart mbp = new MimeBodyPart();
// mbp.setText(mail.getMailContent());
mbp.setText(
new String(mail.getMailContent().getBytes("ISO-8859-1")),
"GBK");
mp.addBodyPart(mbp);
/** 添加附件 */
list = mail.getFile();
for (int i = 0; i < list.size(); i++) {
/** 将附件逐个添加进去 */
mbp = new MimeBodyPart();
String fileName = list.get(i);
/** 根据附件的名称创建文件数据源 */
FileDataSource fds = new FileDataSource(fileName);
/** 处理附件 : 设置数据处理器 */
mbp.setDataHandler(new DataHandler(fds));
/** 处理附件 : 设置文件名称 */
mbp.setFileName(characterset.to8859(fds.getName()));
mp.addBodyPart(mbp);
}
/** 清空附件 */
mail.setFile(new ArrayList<String>());
/** 将邮件内容添加到MimeMessage */
message.setContent(mp);
/** 设置邮件的发送日期 */
message.setSentDate(new Date());
/** 发送电子邮件 */
Transport.send(message);
///System.out.println("**************"+mail.getMailUserName()+"\t"+mail.getMailPassword());
return true;
} catch (AddressException e) {
log.error(
"MailJdbcDao : send(MailBean mail) : AddressException : ",
e);
System.err
.println("MailJdbcDao : send(MailBean mail) : AddressException : "
+ e.getMessage());
} catch (MessagingException e) {
log
.error(
"MailJdbcDao : send(MailBean mail) : MessagingException : ",
e);
System.err
.println("MailJdbcDao : send(MailBean mail) : MessagingException : "
+ e.getMessage());
} catch (UnsupportedEncodingException e) {
log
.error(
"MailJdbcDao : send(MailBean mail) : UnsupportedEncodingException : ",
e);
System.err
.println("MailJdbcDao : send(MailBean mail) : UnsupportedEncodingException : "
+ e.getMessage());
}
return false;
}
}
Util.java
package mail.util;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
public class Util {
/** 检测物理文件是否存在 */
public static Boolean fileExists(String fileName)
throws UnsupportedEncodingException {
if (new File(fileName).exists()) {
return true;
} else
return false;
}
/** 判断文件扩展名称是否是指定的合法扩展名称 */
public static String judgeFileExtendName(String fileName,
String extendName[]) {
fileName = fileName.toLowerCase();
for (int i = 0; i < extendName.length; i++)
if (fileName.endsWith(extendName[i]))
return extendName[i];
return null;
}
/** 解析字符串返回ArrayList<String> :源字符串,分隔符号 */
public static ArrayList<String> analysisStringForArrayList(String source,
String separator) {
ArrayList<String> list = new ArrayList<String>();
int start = 0;
int end = 0;
String str = null;
while (true) {
end = source.indexOf(separator, start);
if (end == -1) {
str = source.substring(start, source.length());
if (str != null && str.length() > 0)
list.add(str);
break;
}
str = source.substring(start, end);
if (str != null && str.length() > 0)
list.add(str);
start = end + 1;
}
return list;
}
/** 解析字符串返回ArrayList<String> :源字符串,分隔符号 */
public static String[] analysisStringForArray(String source,
String separator) {
String str[] = new String[countString(source, separator)];
int start = 0;
int end = 0;
int index = 0;
String strx = null;
while (true) {
end = source.indexOf(separator, start);
if (end == -1) {
strx = source.substring(start, source.length());
if (strx != null && strx.length() > 0)
str[index] = strx;
break;
}
strx = source.substring(start, end);
if (strx != null && strx.length() > 0)
str[index++] = strx;
start = end + 1;
}
return str;
}
/** 解析字符串 :计算子字符串个数 */
public static int countString(String source, String separator) {
int start = 0;
int end = 0;
int count = 0;
while (true) {
end = source.indexOf(separator, start);
if (end == -1) {
++count;
break;
}
++count;
start = end + 1;
}
return count;
}
/** 将ISO-8859-1编码的字符串转换为页面支持的编码 */
public static String From8859(String source) {
try {
return new String(source.getBytes("ISO-8859-1"));
} catch (UnsupportedEncodingException e) {
System.err
.println("Util : From8859(String source) : UnsupportedEncodingException : "
+ e.getMessage());
}
return null;
}
/** 将页面提交字符串转换成ISO-8859-1编码的字符串 : 存入数据库 */
public static String To8859(String source) {
try {
return new String(source.getBytes(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
System.err
.println("Util : To8859(String source) : UnsupportedEncodingException : "
+ e.getMessage());
}
return null;
}
/** 获得一个格式化的时间字符串 : 年-月-日 时:分:秒 */
public static String getFormatDate() {
return DateFormat.getDateTimeInstance().format(new Date());
}
/** 获得一个格式化的时间字符串 : 年-月-日 时-分-秒 */
public static String getStringDate() {
Calendar calendar = Calendar.getInstance();
StringBuilder date = new StringBuilder();
date.append(calendar.get(Calendar.YEAR));
date.append("-");
date.append(calendar.get(Calendar.MONTH));
date.append("-");
date.append(calendar.get(Calendar.DATE));
date.append(" ");
date.append(calendar.get(Calendar.HOUR));
date.append("-");
date.append(calendar.get(Calendar.MINUTE));
date.append("-");
date.append(calendar.get(Calendar.SECOND));
return date.toString();
}
/** 字符串时间的加减 : 字符串时间,加减量,加减的类型<年、月、日>,加减的动作<加/减> */
public static Calendar DateOperation(String dateString, int number,
String type, Boolean flag) {
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(DateFormat.getDateInstance().parse(dateString));
if (type.equals("DATE")) {
if (flag == true)
number = calendar.get(Calendar.DATE) + number;
else
number = calendar.get(Calendar.DATE) - number;
calendar.set(Calendar.DATE, number);
} else if (type.equals("MONTH")) {
if (flag == true)
number = calendar.get(Calendar.MONTH) + number;
else
number = calendar.get(Calendar.MONTH) - number;
calendar.set(Calendar.MONTH, number);
} else {
if (flag == true)
number = calendar.get(Calendar.YEAR) + number;
else
number = calendar.get(Calendar.YEAR) - number;
calendar.set(Calendar.YEAR, number);
}
return calendar;
} catch (ParseException e) {
System.err
.println("DataUtil : DateOperation : ParseException : 字符串时间格式不对 !例如 : \"2006-12-05\""
+ e.getMessage());
}
return null;
}
/**
* 测试字符串时间范围 :开始时间,结束时间,需要比较时间, return 0 = 在此范围内,1 = 大于结束时间,-1 = 小于开始时间, -2 =
* 异常
*/
public static int compareToDate(String start, String end, String source) {
if (Util.compareTo(start, end) < 0)
return -2;
int i = Util.compareTo(start, source);
int j = Util.compareTo(end, source);
if (i == -2 || j == -2)
return -2;
else if (i >= 0 && j <= 0)
return 0;
else if (j > 0)
return 1;
else
return -1;
}
/** 比较两个字符串时间的大小 : 基准时间,需要比较时间, return 1 = 大于; -1 = 小于; 0 = 等于; -2 = 异常 */
public static int compareTo(String benchmarkDate, String sourceDate) {
try {
Calendar benchmark = Calendar.getInstance();
benchmark
.setTime(DateFormat.getDateInstance().parse(benchmarkDate));
Calendar source = Calendar.getInstance();
source.setTime(DateFormat.getDateInstance().parse(sourceDate));
int i = source.compareTo(benchmark);
if (i > 0)
return 1;
else if (i < 0)
return -1;
else
return i;
} catch (ParseException e) {
System.err
.println("DataUtil : compareTo : ParseException : 字符串时间格式不对 !例如 : \"2006-12-05\""
+ e.getMessage());
return -2;
}
}
}