- 浏览: 891182 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
将上次发邮件的代码写了个方法简单封装了一下,以满足需求,主要是各邮件服务商情况不一样,有时候可能会发送不成功现象,为了减少失败的概率,所以试着通过配置多个邮件服务商来按顺序发送邮件,失败了就换一个邮件服务器,成功则立即终止。请看代码:
(一)javabean封装邮件发送相关信息:
- package com.basekj.entity;
- import java.util.ArrayList;
- /**
- * 邮件发送信息
- * @author
- * @date 2010-08-18
- */
- public class SendEmailInfoBean {
- private String emailFromInfo;
- //private ArrayList<EmailFromInfoBean> emailFromInfo; //邮件发送方基本信息
- private ArrayList<String> emailTo; //邮件接收方
- private ArrayList<String> emailCc; //邮件抄送方
- private ArrayList<String> emailBcc; //邮件秘密抄送方
- private String subject; //主题
- private String sendMsg; //邮件内容
- // public ArrayList<EmailFromInfoBean> getEmailFromInfo() {
- // return emailFromInfo;
- // }
- // public void setEmailFromInfo(ArrayList<EmailFromInfoBean> emailFromInfo) {
- // this.emailFromInfo = emailFromInfo;
- // }
- public ArrayList<String> getEmailTo() {
- return emailTo;
- }
- public String getEmailFromInfo() {
- return emailFromInfo;
- }
- public void setEmailFromInfo(String emailFromInfo) {
- this.emailFromInfo = emailFromInfo;
- }
- public void setEmailTo(ArrayList<String> emailTo) {
- this.emailTo = emailTo;
- }
- public ArrayList<String> getEmailCc() {
- return emailCc;
- }
- public void setEmailCc(ArrayList<String> emailCc) {
- this.emailCc = emailCc;
- }
- public ArrayList<String> getEmailBcc() {
- return emailBcc;
- }
- public void setEmailBcc(ArrayList<String> emailBcc) {
- this.emailBcc = emailBcc;
- }
- public String getSubject() {
- return subject;
- }
- public void setSubject(String subject) {
- this.subject = subject;
- }
- public String getSendMsg() {
- return sendMsg;
- }
- public void setSendMsg(String sendMsg) {
- this.sendMsg = sendMsg;
- }
- }
package com.basekj.entity; import java.util.ArrayList; /** * 邮件发送信息 * @author * @date 2010-08-18 */ public class SendEmailInfoBean { private String emailFromInfo; //private ArrayList<EmailFromInfoBean> emailFromInfo; //邮件发送方基本信息 private ArrayList<String> emailTo; //邮件接收方 private ArrayList<String> emailCc; //邮件抄送方 private ArrayList<String> emailBcc; //邮件秘密抄送方 private String subject; //主题 private String sendMsg; //邮件内容 // public ArrayList<EmailFromInfoBean> getEmailFromInfo() { // return emailFromInfo; // } // public void setEmailFromInfo(ArrayList<EmailFromInfoBean> emailFromInfo) { // this.emailFromInfo = emailFromInfo; // } public ArrayList<String> getEmailTo() { return emailTo; } public String getEmailFromInfo() { return emailFromInfo; } public void setEmailFromInfo(String emailFromInfo) { this.emailFromInfo = emailFromInfo; } public void setEmailTo(ArrayList<String> emailTo) { this.emailTo = emailTo; } public ArrayList<String> getEmailCc() { return emailCc; } public void setEmailCc(ArrayList<String> emailCc) { this.emailCc = emailCc; } public ArrayList<String> getEmailBcc() { return emailBcc; } public void setEmailBcc(ArrayList<String> emailBcc) { this.emailBcc = emailBcc; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getSendMsg() { return sendMsg; } public void setSendMsg(String sendMsg) { this.sendMsg = sendMsg; } }
(二)发送邮件类:
- package com.basekj.business;
- import java.util.ArrayList;
- import org.apache.commons.lang.StringUtils;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.commons.mail.DefaultAuthenticator;
- import org.apache.commons.mail.EmailException;
- import org.apache.commons.mail.SimpleEmail;
- import com.basekj.entity.SendEmailInfoBean;
- import com.basekj.exception.BusinessException;
- import com.basekj.util.ReadProperties;
- /**
- *
- * @author
- * @date 2010-08-17
- */
- public class BaseEmailSendBiz
- {
- public BaseEmailSendBiz()
- {
- }
- private static final Log logger = LogFactory.getLog(BaseEmailSendBiz.class);
- /**
- *
- * @param emailInfo
- * @return result:false表示发送失败,true表示发送成功!
- * @throws BusinessException
- */
- public static boolean send(SendEmailInfoBean emailInfo) throws BusinessException {
- boolean result = false;
- SimpleEmail email = new SimpleEmail();
- //email.setDebug(true);
- try
- {
- String emailFromInfo = emailInfo.getEmailFromInfo();
- String[] fromArray = emailFromInfo.split("\\{|}"); //按{或 } 分解字符串
- for(int i=0; i<fromArray.length; i++) {
- if(StringUtils.isNotEmpty(fromArray[i])) {
- String[] from = fromArray[i].split(",");
- email.setHostName(from[0]); //发送方邮件服务器
- email.setFrom(from[1]); // 发送方地址
- email.setAuthenticator(new DefaultAuthenticator(from[2],from[3]));
- if("1".equals(from[4])) {
- email.setTLS(true); //是否TLS校验,,某些邮箱需要TLS安全校验,同理有SSL校验
- }
- if("1".equals(from[5])) {
- email.setSSL(true);
- }
- ArrayList<String> emailTo = emailInfo.getEmailTo();
- ArrayList<String> emailCc = emailInfo.getEmailCc();
- ArrayList<String> emailBcc = emailInfo.getEmailBcc();
- for(int j=0; j<emailTo.size(); j++) {
- email.addTo(emailTo.get(j)); // 接收方
- }
- for(int j=0; emailCc!=null&&j<emailCc.size(); j++) {
- email.addCc(emailCc.get(j)); // 抄送方
- }
- for(int j=0; emailBcc!=null&&j<emailBcc.size(); j++) {
- email.addBcc(emailBcc.get(j)); // 秘密抄送方
- }
- email.setCharset("GB2312"); // 编码
- email.setSubject(emailInfo.getSubject()); // 标题
- email.setMsg(emailInfo.getSendMsg()); // 内容
- String emailResult = email.send();
- System.out.println("用"+from[1]+"邮箱来发送,发送结果:"+emailResult);
- if(!StringUtils.equals("failed",emailResult)) {
- return true;
- }else {
- email = null;
- email = new SimpleEmail();
- continue;
- }
- }
- }
- } catch (EmailException e) {
- result = false;
- if(logger.isErrorEnabled()){
- logger.error("发送邮件出错!");
- }
- throw new BusinessException(e.getMessage());
- }
- return result;
- }
- public static void main(String[] args)
- {
- ReadProperties property = new ReadProperties();
- SendEmailInfoBean emailInfo = new SendEmailInfoBean();
- emailInfo.setEmailFromInfo(property.readData("email_info"));
- ArrayList<String> a = new ArrayList<String>();
- a.add("******@qq.com");
- a.add("xxx@163.com");
- emailInfo.setEmailTo(a);
- emailInfo.setSubject("请查收");
- emailInfo.setSendMsg("这个是java程序发送邮件测试的");
- try {
- System.out.println("开始发送:");
- boolean result = send(emailInfo);
- System.out.println("发送结果:" + result);
- } catch (BusinessException e) {
- e.printStackTrace();
- }
- }
- }
package com.basekj.business; import java.util.ArrayList; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.mail.DefaultAuthenticator; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.SimpleEmail; import com.basekj.entity.SendEmailInfoBean; import com.basekj.exception.BusinessException; import com.basekj.util.ReadProperties; /** * * @author * @date 2010-08-17 */ public class BaseEmailSendBiz { public BaseEmailSendBiz() { } private static final Log logger = LogFactory.getLog(BaseEmailSendBiz.class); /** * * @param emailInfo * @return result:false表示发送失败,true表示发送成功! * @throws BusinessException */ public static boolean send(SendEmailInfoBean emailInfo) throws BusinessException { boolean result = false; SimpleEmail email = new SimpleEmail(); //email.setDebug(true); try { String emailFromInfo = emailInfo.getEmailFromInfo(); String[] fromArray = emailFromInfo.split("\\{|}"); //按{或 } 分解字符串 for(int i=0; i<fromArray.length; i++) { if(StringUtils.isNotEmpty(fromArray[i])) { String[] from = fromArray[i].split(","); email.setHostName(from[0]); //发送方邮件服务器 email.setFrom(from[1]); // 发送方地址 email.setAuthenticator(new DefaultAuthenticator(from[2],from[3])); if("1".equals(from[4])) { email.setTLS(true); //是否TLS校验,,某些邮箱需要TLS安全校验,同理有SSL校验 } if("1".equals(from[5])) { email.setSSL(true); } ArrayList<String> emailTo = emailInfo.getEmailTo(); ArrayList<String> emailCc = emailInfo.getEmailCc(); ArrayList<String> emailBcc = emailInfo.getEmailBcc(); for(int j=0; j<emailTo.size(); j++) { email.addTo(emailTo.get(j)); // 接收方 } for(int j=0; emailCc!=null&&j<emailCc.size(); j++) { email.addCc(emailCc.get(j)); // 抄送方 } for(int j=0; emailBcc!=null&&j<emailBcc.size(); j++) { email.addBcc(emailBcc.get(j)); // 秘密抄送方 } email.setCharset("GB2312"); // 编码 email.setSubject(emailInfo.getSubject()); // 标题 email.setMsg(emailInfo.getSendMsg()); // 内容 String emailResult = email.send(); System.out.println("用"+from[1]+"邮箱来发送,发送结果:"+emailResult); if(!StringUtils.equals("failed",emailResult)) { return true; }else { email = null; email = new SimpleEmail(); continue; } } } } catch (EmailException e) { result = false; if(logger.isErrorEnabled()){ logger.error("发送邮件出错!"); } throw new BusinessException(e.getMessage()); } return result; } public static void main(String[] args) { ReadProperties property = new ReadProperties(); SendEmailInfoBean emailInfo = new SendEmailInfoBean(); emailInfo.setEmailFromInfo(property.readData("email_info")); ArrayList<String> a = new ArrayList<String>(); a.add("******@qq.com"); a.add("xxx@163.com"); emailInfo.setEmailTo(a); emailInfo.setSubject("请查收"); emailInfo.setSendMsg("这个是java程序发送邮件测试的"); try { System.out.println("开始发送:"); boolean result = send(emailInfo); System.out.println("发送结果:" + result); } catch (BusinessException e) { e.printStackTrace(); } } }
注意:邮件发送地址是从配置文件里读取的,见后面代码介绍,我稍微改了下apache commons email 源代码,因为里面那个send方法初始化邮件信息和发送邮件会抛异常,初始化失败抛异常倒可以接受,但是因为我可能需要换个服务器重新发送,让它抛异常就不太好处理了,我想让它在某次发送失败后,继续换个发送地址重新发送,所以我将源代码里Email类的send方法,发送失败时给予返回值“failed”,代码如下:
- /**
- * Sends the previously created MimeMessage to the SMTP server.
- *
- * @return the message id of the underlying MimeMessage
- * @throws EmailException the sending failed
- */
- public String sendMimeMessage()
- {
- EmailUtils.notNull(this.message, "message");
- try
- {
- Transport.send(this.message);
- return this.message.getMessageID();
- }
- catch (Throwable t)
- {
- String msg = "Sending the email to the following server failed : "
- + this.getHostName()
- + ":"
- + this.getSmtpPort();
- return "failed";
- }
- }
/** * Sends the previously created MimeMessage to the SMTP server. * * @return the message id of the underlying MimeMessage * @throws EmailException the sending failed */ public String sendMimeMessage() { EmailUtils.notNull(this.message, "message"); try { Transport.send(this.message); return this.message.getMessageID(); } catch (Throwable t) { String msg = "Sending the email to the following server failed : " + this.getHostName() + ":" + this.getSmtpPort(); return "failed"; } }
(三)读取配置文件类:
- package com.basekj.util;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Properties;
- import org.apache.commons.lang.StringUtils;
- /**
- * 读取配置文件
- *
- * @author
- *
- */
- public class ReadProperties {
- /**
- * 读取配置文件参数
- * 传入参数名,当读取错误或无
- * 对应参数键值对时,返回空字符串。
- * @param key
- * @return result
- */
- public String readData(String key) {
- InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("system_parameter.properties");
- Properties p = new Properties();
- String result = "";
- try {
- p.load(inputStream);
- } catch (Exception e1) {
- e1.printStackTrace();
- return result;
- } finally {
- if(null != inputStream)
- try {
- inputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- return result;
- }
- }
- result = p.getProperty(key);
- return StringUtils.isEmpty(result)?"":result;
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String s = new ReadProperties().readData("email_info");
- String [] arr = s.split("\\{|}");
- for(String r:arr) {
- if(r != null && r.length() > 0) {
- System.out.println(r);
- }
- }
- }
- }
package com.basekj.util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.apache.commons.lang.StringUtils; /** * 读取配置文件 * * @author * */ public class ReadProperties { /** * 读取配置文件参数 * 传入参数名,当读取错误或无 * 对应参数键值对时,返回空字符串。 * @param key * @return result */ public String readData(String key) { InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("system_parameter.properties"); Properties p = new Properties(); String result = ""; try { p.load(inputStream); } catch (Exception e1) { e1.printStackTrace(); return result; } finally { if(null != inputStream) try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); return result; } } result = p.getProperty(key); return StringUtils.isEmpty(result)?"":result; } public static void main(String[] args) { // TODO Auto-generated method stub String s = new ReadProperties().readData("email_info"); String [] arr = s.split("\\{|}"); for(String r:arr) { if(r != null && r.length() > 0) { System.out.println(r); } } } }
(四)静态配置文件system_parameter.properties(这里配置了2个服务器)
- #6 parameters:1:email hostname,2:email from address,3:email username,4:email password,5:if tls(1:yes,0:no),6:if ssl(1:yes,0:no)
- #--------------------以上是注释-------------------------------------
- email_info={smtp.sina.com,test1@sina.cn,test1@sina.cn,pwd1,0,0}{smtp.163.com,test2@163.com,test2@163.com,pwd2,0,0}
#6 parameters:1:email hostname,2:email from address,3:email username,4:email password,5:if tls(1:yes,0:no),6:if ssl(1:yes,0:no) #--------------------以上是注释------------------------------------- email_info={smtp.sina.com,test1@sina.cn,test1@sina.cn,pwd1,0,0}{smtp.163.com,test2@163.com,test2@163.com,pwd2,0,0}
发表评论
文章已被作者锁定,不允许评论。
-
操作系统的目标和作用
2012-07-05 23:46 1326操作系统的目标 目前存在着多种类型的OS,不同类型的OS ... -
利用(ffmpeg)生成视频缩略图(java)
2012-07-01 01:11 0对于上传视频生成缩略图使用的是ffmpeg进行生成的。 自己在 ... -
对Java多线程技术中所有方法的详细解析
2012-06-06 11:32 784一、run()和start() 这两个 ... -
java乱码
2012-06-06 11:33 968自从接触Java和JSP以来, ... -
学习apache commons-io类库中的文件清除器
2011-07-06 23:26 1442学习apache commons-io 1.4类库中的File ... -
java 正则表达式 过滤html标签
2011-05-24 15:10 5353前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字 ... -
转---Eclipse中web-inf和meta-inf文件夹的信息
2011-05-24 13:08 1132Eclipse中web-inf和meta-inf ... -
logback与Log4J的区别
2011-05-17 23:34 1433Logback和log4j是非常相似 ... -
性能优化
2011-04-14 16:10 1179(1)jdbc性能优化 jdbc程序的性能主要由两个因素决定 ... -
JAVA的Random类(转)
2011-04-12 00:21 908Random类中实现的随机算法是伪随机,也就是有规则的随机。在 ... -
非阻塞的Socket链接
2011-04-10 21:59 890import java.io.IOException; ... -
创建临时文件
2011-04-10 21:55 1091package net.java2000.io; ... -
面向对象设计的基本原则
2011-04-07 10:28 1144摘自:http://soft6.com/tech/6/6501 ... -
proxool
2011-04-02 15:01 858属性列表说明: fatal-sql- ... -
当前Java软件开发中几种认识误区
2011-04-01 10:12 876越来越多人开始使用Java ... -
Java中查看一个方法被调用的层次(Reflection、StackTrace)
2011-04-01 00:53 2033package test; public class Mai ... -
反序列化时恢复transient字段
2011-03-30 13:20 1212我们知道将字段设置为transient,可以避免该自动被序列化 ... -
用socket连接服务器直接发送接收邮件
2011-03-22 17:22 1301首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 &l ... -
利用JavaMail收/发Gmail邮件(SSL)
2011-03-22 17:21 2388Gmail目前已经启用了POP3和SMTP服务,具体情况请看 ... -
Java 反射与内省
2011-03-14 22:08 1073一、java反射机制 JAVA反 ...
相关推荐
Apache Commons Email库的核心目标是消除使用JavaMail API时的一些复杂性和冗余工作,同时保持足够的灵活性以满足各种邮件需求。 Apache Commons Email支持以下主要功能: 1. **基本邮件发送**:通过SMTP(简单...
总之,Apache Commons Email为Java开发者提供了一个强大且易于使用的邮件发送工具,通过简单的代码即可实现包括发送验证码在内的各种邮件功能。在实际开发中,结合业务需求进行适当的优化和扩展,可以极大地提升开发...
在本文中,我们将详细探讨Apache Commons Email的使用方法和核心特性。 首先,Apache Commons Email提供了多种构造邮件的方法,包括创建简单文本邮件、HTML邮件、带有附件的邮件等。例如,你可以通过`SimpleEmail`...
6. Apache Commons Email: 这个模块使得发送电子邮件变得非常简单,支持HTML邮件、附件、多部分消息以及SMTP认证等功能。 这些jar包是许多Java项目中不可或缺的部分,尤其在处理系统级任务或提高代码可复用性时。...
本篇文章将详细讲解几个重要的 Apache Commons 模块,包括 Apache Commons Email、Apache Commons IO、Apache Commons Pool、Apache Commons DBCP、Apache Commons Dbutils 和 Apache Commons Collections,以及 ...
9. **Email**: Commons Email 提供了一个简单的API来发送电子邮件,支持HTML邮件、附件等。 10. **Execute**: 这个组件提供了一种执行外部进程并管理其生命周期的方式。 在实际开发中,Apache Commons工具集大大...
apache commons jar(commons所有的jar包,从官网下载提供给大家) 因为涉及jar太多,包括有src源代码,只需要3分,希望大家理解,我也是从官网花了很长时间才一个一个下完,需要的请自取。全部是zip文件,每个对应的...
《Android应用中使用Apache Commons Email库发送邮件》 在Android应用程序开发中,有时我们需要集成邮件发送功能,以便向用户发送验证码、通知或者提供其他服务。Apache Commons Email库是一个强大的Java库,它简化...
这份资料是+++利用Apache Commons Email发送邮件+++的内容,希望能给有志成为IT人才一点帮助!你的进步就是对我最大的回报! Thank you!
daemon-1.0.15-bin commons-dbutils-1.6-bin commons-digester3-3.2-bin commons-el-1.0 commons-email-1.4-bin commons-fileupload-1.0 commons-fileupload-1.1.1 commons-fileupload-1.1 commons-file upload-...
Apache Commons Email库为Java开发者提供了一种简单且强大的方式来实现这一功能。这个库封装了复杂的SMTP协议,让我们可以通过几行代码轻松发送邮件。 Apache Commons Email库是Apache软件基金会的Apache Commons...
在JavaMail中,配置和使用邮件服务可能相对复杂,而Apache Commons Mail则通过提供预定义的邮件实现和简单易用的接口来解决了这个问题。 **Apache Commons Mail基本概念** 1. **邮件组件**:Apache Commons Mail ...
使用Apache Commons Email时,首先需要在项目中引入依赖。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.apache.commons <artifactId>commons-email 版本号 ``` 然后,在代码中,你...
1. **简单易用的API**:Apache Commons Email 提供了清晰的接口,使得创建邮件变得简单直观。开发者可以通过几个方法就能设置邮件的主题、正文、附件,以及发送者和接收者的邮箱地址。 2. **多种邮件类型支持**:该...
Apache Commons Email 是一个Java库,专门用于简化电子邮件的发送。这个库提供了丰富的API,使得开发者可以轻松地构建和发送各种类型的邮件,包括HTML格式的邮件。在这个“commons email 发送html邮件完整优化实例”...
Apache Commons 工具类介绍及简单使用 Apache Commons 是一个开源的 Java 库,提供了许多实用的工具类,帮助开发者快速构建 Java 应用程序。本文将对 Apache Commons 工具类进行介绍,并提供简单的使用示例。 ...
Apache Commons Email 是一个Java库,专门用于简化电子邮件的发送。这个库是Apache Commons项目的一部分,提供了许多方便的API,使得开发者能够轻松地构建并发送包含文本、HTML内容以及附件的邮件。下面我们将深入...
总结,Apache Commons Email库提供了一套强大且易于使用的API,使得在Java中发送电子邮件变得简单。通过`TestCommonEMail.java`这样的示例代码,开发者可以快速上手并掌握邮件发送的核心步骤,同时根据项目需求灵活...
Apache Commons Email 是一个Java库,专门用于简化电子邮件的创建和发送。这个库是Apache Commons项目的一部分,它提供了许多高级功能,使得开发人员可以方便地处理复杂的邮件操作,而不需要直接与JavaMail API进行...
Maven坐标:org.apache.commons:commons-email:1.5; 标签:apache、commons、email、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...