`
verytiny
  • 浏览: 368715 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javamail3

    博客分类:
  • J2EE
阅读更多

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

分享到:
评论
1 楼 verytiny 2007-05-08  

package mail.jdbc;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/** Authenticator接口实现类 :send Mail 的 session 中用到 */
public class AuthenticatorImpl extends Authenticator {
private String name;

private String password;

public AuthenticatorImpl() {
super();
}

public AuthenticatorImpl(String name, String password) {
super();
this.name = name;
this.password = password;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(name, password);
}
}

相关推荐

    使用javaMail发邮件及收取邮箱未读邮件并标记为已读

    JavaMail 是一个强大的 Java 库,它允许开发者在应用程序中实现电子邮件的发送和接收功能。这个库支持多种邮件协议,如 SMTP(简单邮件传输协议)用于发送邮件,POP3(邮局协议)和 IMAP(因特网消息访问协议)用于...

    javamail(带界面的javamail)

    JavaMail 是一个强大的开源库,用于在Java应用程序中实现电子邮件的发送和接收功能。它提供了丰富的API,使得开发者能够方便地处理SMTP、POP3、IMAP等邮件协议,支持多种邮件格式,包括文本、HTML以及带有附件的邮件...

    javamail-demo

    4. **javamail3-HTML**: 这个示例演示了如何发送包含 HTML 内容的邮件。除了设置纯文本内容,还需要设置 `MimeMessage` 的 `MimeBodyPart` 为 `MULTIPART/ALTERNATIVE` 类型,这样邮件客户端可以选择以纯文本或 ...

    javamail的jar包:javamail-1.6

    3. **POP3和IMAP协议**:对于邮件接收,JavaMail 提供了对邮局协议第三版(POP3)和因特网消息访问协议(IMAP)的支持,允许用户从邮件服务器检索和下载邮件。 4. **JAF(JavaBeans Activation Framework)**:...

    JavaMail+JAF+JavaMail_API+JavaMail_API详解

    JavaMail 是一个开源的Java库,它为Java程序员提供了处理电子邮件的能力。这个库不仅支持SMTP、POP3和IMAP协议,还支持其他的邮件系统协议,如NNTP和EWS。JavaMail API是JavaMail库的核心部分,它提供了一系列的接口...

    javamail 所有jar包

    JavaMail 是一个开源的 Java API,它为开发者提供了在 Java 应用程序中发送和接收电子邮件的功能。这个API包括了多种协议的支持,如SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)。在...

    javaMail API 跟 javaMail.jar包

    JavaMail API是Java平台上用于处理电子邮件的一套标准API,它为开发者提供了丰富的接口和类,以便于发送、接收和管理电子邮件。JavaMail API是Java EE的一部分,但也可以在Java SE环境中使用。`javaMail.jar`是...

    JavaMail 1.6.0 Final Release

    JavaMail 是一个开源的 Java API,它为开发者提供了在 Java 应用程序中发送和接收电子邮件的能力。这个“JavaMail 1.6.0 Final Release”是 JavaMail 的一个重要版本,它包含了对 SMTP(简单邮件传输协议)、IMAP...

    JavaMail-1.5 API

    JavaMail API是Java平台上用于发送和接收电子邮件的一个标准扩展库。它并不是Java标准库的一部分,而是Java企业版(J2EE)中的一部分。JavaMail提供了一系列用于处理电子邮件的类和接口,允许开发者在Java应用程序中...

    javamail.jar,javamail资源包

    JavaMail 是一个开源的 Java API,它为Java开发者提供了处理电子邮件的能力。这个API允许开发者发送、接收、管理邮件,包括附件、HTML 内容、MIME 多部分消息等。`javamail.jar` 文件是JavaMail的核心库,包含了所有...

    Java邮件开发源代码

    在这个压缩包中,我们有两个关键的源码文件夹:`javamail2`和`javamail3`,它们很可能是两个不同版本或不同应用场景的邮件发送示例。 首先,让我们了解Java邮件开发的基本概念。JavaMail API是Java平台上的一个标准...

    JavaMail相关jar包

    3. **Provider**:JavaMail中的Provider是实现特定邮件协议(如SMTP、POP3、IMAP)的具体类,它们实现了JavaMail API的接口。例如,`SMTPTransport`用于发送邮件,而`IMAPFolder`用于读取邮件。 接下来,我们将重点...

    JavaMail完整JAR包

    3. **SMTP协议**: - JavaMail 使用SMTP(Simple Mail Transfer Protocol)协议发送邮件。SMTP服务器通常是邮件系统的出站服务器,负责将邮件传递到目的地。 4. **POP3/IMAP协议**: - 对于接收邮件,JavaMail...

    使用jsp实现javaMail邮箱功能开发

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JavaMail API则是一个用于处理电子邮件的库。本项目旨在利用JSP和JavaMail API实现在Web应用中发送邮件的功能,主要涉及POP3协议。下面...

    JavaMail API 1.4.7 官网下载 最新版

    3. **MimeMessage 类**:`MimeMessage`是`Message`的一个子类,扩展了对多部分和复杂邮件格式的支持,如HTML内容、附件等。使用`MimeBodyPart`可以添加文本、图片、文件作为邮件的组成部分。 4. **Transport 类**:...

    javamail-1_3_3_01邮件发送组件

    这个“javamail-1_3_3_01邮件发送组件”指的是 JavaMail 的一个特定版本,即1.3.3_01。这个版本可能包含了对之前版本的改进、修复了某些已知问题,或者增加了新的功能。 在JavaMail中,发送邮件主要依赖`javax.mail...

    JavaMail相关Jar包

    3. **创建Message** - 创建一个`Message`实例,并设置发件人、收件人、主题和邮件内容。可以使用`MimeMessage`类来处理MIME格式的邮件。 4. **连接Transport** - 使用Session获取`Transport`服务,通过该服务发送...

    javamail API帮助文档

    3. **MimeMessage类**:MimeMessage是Message的一个子类,专门处理MIME格式的邮件。MIME是一种标准,允许邮件包含文本、图像、音频、视频等多种类型的数据。 4. **Transport类**:Transport类负责将邮件发送到邮件...

    javamail 视频源码 第一部分

    3. **发送邮件**:通过 Transport 类的 send 方法,我们可以将 Message 对象发送出去。这包括编写邮件内容(如主题、正文、附件),以及设置发件人、收件人和抄送人等信息。 4. **接收邮件**:使用 Store 类连接到...

    JavaMail 1.6.0 的官方例子

    3. **POP3 和 IMAP 协议**:JavaMail 同样支持 POP3 (Post Office Protocol) 用于接收邮件,以及 IMAP (Internet Message Access Protocol) 用于管理和检索邮箱中的邮件。邮件收发示例将演示如何使用这两个协议。 4...

Global site tag (gtag.js) - Google Analytics