javamail3

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;
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值