- 浏览: 181733 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
yu505656166:
这个问题是怎么解决的啊?
spring mail 发送邮件,没有主题,没有收件人,显示乱码问题 -
dextersmake:
我的配置和你的差不多,调了有一些效果,但是还不是很满意。
YARN内存使用优化配置 -
kjkhi:
dxb350352 写道怎么用啊,运行完了也不知道取值的方法 ...
Apache POI组件使用eventusermodel模式读取Excel文档内容 -
dxb350352:
怎么用啊,运行完了也不知道取值的方法
Apache POI组件使用eventusermodel模式读取Excel文档内容 -
wanshijian:
相同问题,解决了!
使用cxf的wsdl2java是遇到的问题
通过Internet发送邮件,可能会在网络传输上面使用较多的时间,如果调用发送邮件的线程与发送邮件线程是同一个的话,那么有可能会照成系统等待较长的时间而无法继续执行,影响系统效率。
那么这时可考虑使用多线程,实现异步发送,而不用等待邮件发送者的返回。
首先,是发送邮件的抽象任务类。其子类负责发送邮件操作。
public abstract class AbstractTask implements Runnable { private IEmailSenderListener iEmailSenderListener; private Log log = LogFactory.getLog(AbstractTask.class); /* (non-Javadoc) * @see java.lang.Runnable#run() */ @Override public void run() { if(iEmailSenderListener != null){ // 操作开始响应事件 iEmailSenderListener.beforeSendEmail(); } boolean flag = false; try{ flag = doAction(); }catch(Exception e){ if(iEmailSenderListener != null){ iEmailSenderListener.catchException(e); } log.error(e,e.fillInStackTrace()); e.printStackTrace(); } if(iEmailSenderListener != null){ // 操作完成之后 iEmailSenderListener.afterSendEmail(flag); } } public abstract boolean doAction() throws Exception; }
发送邮件实现类:
public class EmailSendTask extends AbstractTask{ private JavaMailSender javaMailSender; SimpleMailMessage simpleMailMessage; MimeMessage mimeMessage; public EmailSendTask(SimpleMailMessage simpleMailMessage,JavaMailSender javaMailSender){ this.simpleMailMessage = simpleMailMessage; this.javaMailSender = javaMailSender; } public EmailSendTask(MimeMessage mimeMessage,JavaMailSender javaMailSender){ this.mimeMessage = mimeMessage; this.javaMailSender = javaMailSender; } /* * (non-Javadoc) * @see net.bingosoft.common.email.task.AbstractTask#doAction() */ @Override public boolean doAction() throws Exception { boolean flag = true; if(this.simpleMailMessage != null){ javaMailSender.send(this.simpleMailMessage); }else if(this.mimeMessage != null){ javaMailSender.send(this.mimeMessage); } return flag; } }
创建一个线程池,用户实现多线程调用邮件发送类。通过concurrent包实现
public class EmailExecutorPool implements InitializingBean{
/**线程池数量,spring配置文件中配置*/ private Integer poolSize; private ExecutorService service; /** * 在Bean被初始化完成之后,初始化线程大小 */ public void afterPropertiesSet() throws Exception { if(poolSize == null){ service = Executors.newCachedThreadPool(); }else{ service = Executors.newFixedThreadPool(poolSize); } } }
实际调用发送类:
public class EmailSender { /**注入MailSender*/ private JavaMailSender javaMailSender; /**注入线程池*/ private EmailExecutorPool emailExecutorPool; /**设置发件人*/ private String from; private Log log = LogFactory.getLog(EmailSender.class); /** * 发送简单邮件 * @param email */ public void sendMail(EmailEntity email){ if(null == email){ if(log.isDebugEnabled()){ log.debug("需要发送的邮件抽象类为空"); } return; } SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); simpleMailMessage.setTo(email.getTo()); simpleMailMessage.setSubject(email.getSubject()); simpleMailMessage.setText(email.getText()); simpleMailMessage.setFrom(from); //调用线程发送邮件 emailExecutorPool.getService().execute(new EmailSendTask(simpleMailMessage,javaMailSender)); } /** * 发送带附件和图片的邮件 * @param email */ public void sendMimeMail(EmailEntity email) throws Exception{ if(null == email){ if(log.isDebugEnabled()){ log.debug("需要发送的邮件抽象类为空"); } return; } MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,"utf-8"); //收件人 helper.setTo(email.getTo()); //邮件主题 helper.setSubject(email.getSubject()); //邮件内容 helper.setText(email.getText()); //发件人 helper.setFrom(from); this.addAttachmentOrImg(helper, email.getAttachments(), true); this.addAttachmentOrImg(helper, email.getImgs(), false); emailExecutorPool.getService().execute(new EmailSendTask(mimeMessage,javaMailSender)); } /** * 在邮件中增加附件或者图片 * @param helper * @param map * @param isAttachment 是否是附件 */ @SuppressWarnings("rawtypes") public void addAttachmentOrImg(MimeMessageHelper helper, Map map, boolean isAttachment) throws Exception{ for(Iterator it = map.entrySet().iterator();it.hasNext();){ Map.Entry entry = (Map.Entry) it.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); if(StringUtils.isNotBlank(key) && StringUtils.isNotBlank(value)){ FileSystemResource file = new FileSystemResource(new File(value)); if(!file.exists()) continue; try{ if(isAttachment){ helper.addAttachment(MimeUtility.encodeWord(key), file); }else{ helper.addInline(MimeUtility.encodeWord(key), file); } }catch(UnsupportedEncodingException e){ log.debug("附件中文转码错误"); e.printStackTrace(); } } } } }
测试代码:
@Controller
@RequestMapping("/test.do") public class TestController { @Autowired private EmailSender emailSender; private Log log = LogFactory.getLog(TestController.class); @RequestMapping(params = "method=sendemail") public void sendEmail(HttpServletRequest req, HttpServletResponse resp){ System.out.println("sending email ..."); log.debug("sending email ..."); EmailEntity entity = new EmailEntity(); entity.setSubject("test"); entity.setText("测试内容"); entity.setTo("**@qq.com"); emailSender.sendMail(entity); } }
评论
2 楼
zhangpeng0618
2012-09-17
dfdfs[align=center][/align]
1 楼
wangwin123
2012-09-16
思路很好,很多类没有粘出来!可否提供一下源码!
发表评论
-
大数据处理--倒排索引
2014-06-28 14:08 4344简介 倒排索引源 ... -
大数据处理--BitSet
2014-06-28 11:01 1205java.util.BitSet可以按位存储。计算机中一个字 ... -
大数据处理--BloomFilter
2014-06-28 10:58 870BloomFilter——大规 ... -
hadoop 2.x升级异常
2014-06-19 11:54 22391、通过FileSystem这个API去访问hdfs上面的 ... -
Windows 编译Hadoop的Eclipse插件
2013-07-24 00:53 0http://www.cnblogs.com/fly ... -
log4j指定配置文件路径
2013-07-09 11:15 1855在默认情况下 log4j 会从WEB-INF/cl ... -
使用CXF发布和调用webservice
2013-05-08 16:14 1354依赖的JAR cxf-2.2.10.jar je ... -
Filter、Servlet、Listener区别与联系
2013-04-10 17:41 4130J2EE开发中,经常会使用到Filter、Servlet、L ... -
Apache POI组件使用eventusermodel模式读取Excel文档内容
2013-03-18 17:39 9005package com.test; import ja ... -
CXF之JAX-WS(转)
2012-12-18 17:31 1952CXF详解二 CXF之JAX-WS JAX-WS规范是一组 ... -
分析tomcat假死现象的过程
2012-10-15 15:50 0前段时间在公司遇到一个tomcat运行一段时间后(半个月左右 ... -
spring mail 通过HTTP代理发送邮件
2012-09-24 16:22 6571spring框架中org.spr ... -
使用Spring mail通过socks代理发送邮件
2012-09-14 18:25 7027Spring框架提供了JavaMailSender接口及其实 ... -
plupload 上传组件,后台用java实现
2012-09-06 17:21 11417Plupload 是一个Web浏览器上的界面友好的文件上传模 ... -
POI读取大数据量的Excel文件
2012-09-06 11:58 14949POI读取Excel文件有两种方式,一种是使用usermod ... -
UML类图
2012-08-02 16:35 2005UML类图关系大全 1、关联双向关联:C1-C2:指 ... -
使用cxf的wsdl2java是遇到的问题
2012-03-13 10:50 3783对与同一个wsdl文件,我尝试过使用axis2是可以正常转过来 ... -
spring mail 发送邮件,没有主题,没有收件人,显示乱码问题
2012-03-06 14:02 4608使用spring框架风中的javamail发送邮件,遇到了一些 ... -
J2EE使用ireport做导出PDF操作
2012-03-02 17:21 2614首先,在lib中,加入一下jar: jasperreport ... -
Struts使用plupload实现多文件上传
2012-03-02 17:06 2514plupload,一个挺不错js框架。到时其官方demo中只是 ...
相关推荐
附带邮件提醒功能,让亲人朋友监督。主要用到xml操作和事件委托。 主要功能: 1、开启即启动显示昨天总结内容,并发送短信给亲友,另其监督 2、每一小时自动弹窗置顶,让你写这一小时的工作学习内容。 3、有周总结...
对于账号为139移动邮箱还可以发送邮箱中的手机短信,及大的方便了不支持POP3收发邮件的邮箱实现批量发送邮件功能。邮件内容可以使用HTML邮件编辑。 多线程登录多个邮箱同时发送 ---快发邮件想不快都难。 目前系统...
功能表:一。...发邮件3。另存邮件4。另存附件5。删除邮件6。回复邮件二。帐户操作1。新建帐户2。删除帐户3。帐户设置三。地址簿操作1。手动添加地址2。自动添加地址3。删除地址4。地址设置5。地址回复
无需邮件搭建邮件服务器直接发送,改版加入了多线程,同时邮件日志采用文件和数据库同时记录,并写了定时器对于发送失败的邮件进行统计和重发(还在完善这个功能,该功能采用了Gearmand进行任务转发 ps:之前版本实际...
本文实例讲述了Python django实现简单的邮件系统发送邮件功能。分享给大家供大家参考,具体如下: django邮件系统 Django发送邮件官方中文文档 总结如下: 1、首先这份文档看三两遍是不行的,很多东西再看一遍就通顺...
为应用程序提供了电子邮件功能。PowerTCP Mail Tool可以让你创建、发送、读取、预览和编辑邮件信息,验证E-mail地址,以及用简单的属性和方法远程管理你的邮箱。包含SMTP、POP3和IMAP控件,另外还有一个强大的...
ava调用SMTP命令发邮件,实现抄送,密送,附件等。 无需邮件搭建邮件服务器直接发送,改版加入了多线程,同时邮件日志采用文件和数据库同时记录,并写了定时器对于发送失败的邮件进行统计和重发(三次)
当您发送的邮件,具有收件人的退订连接,而同时您又能及时处理这些退订信件时,您所发的邮件就符合了国际惯例,使您远离垃圾邮件的"制造者"这一不光彩的角色。 商务邮件发送通(无需SMTP)是 集邮件发送、管理、...
1)支持多任务、多线程数据采集,同时支持一个采集任务多个 多线程、高性能采集器爬虫.net版源码,可采ajax页面 实例运行,即将采集任务规则与采集任务运行进行剥离,方便采集任务的配置、跟踪管理; 2)支持GET...
基于selenium,使用chrome浏览器,完成qq邮箱登陆并发送发邮件功能,暂时未封装。qq邮箱和126邮箱登陆还是有一些区别的。 #encoding=utf-8 from selenium import webdriver import time #启动chrome浏览器 driver =...
5、多线程的设计与实现,同步的方法 6、网页编辑器(html邮件)的实现 7、解压缩源代码 8、Socks5代理服务器的实现 9、加解密源代码 10、Ping协议的实现,检测远程机器的连通性 11、使用MSXML...
概述:实现单线程多帐户的邮件收发及保存。 功能表: 一。邮件操作 1。收邮件 2。发邮件 3。另存邮件 4。另存附件 5。删除邮件 6。回复邮件 二。帐户操作 1。新建帐户 2。删除帐户 3。帐户设置 三。地址簿操作 1。...
本C++源码实现了IPC摄像头在线ping检测以及设备网络异常告警邮件发送的功能,本源码可以供初学者及有工作经验的人员使用。 通过本源码你可以学习到: 1)如何对IP设备进行ping检测,当ping若干次都ping不通,则认为...
1.本程序解决企业发送工资条...2.通过多线程实现发工资条。 3.通过smtp协议验证邮箱和密码是否匹配,需要验证服务器。 4.通过smtp协议发送到邮件服务器验证邮箱地址是否存在。 5.具有excel导入、导出功能,更方便操作。
使用android通用分享功能、邮件功能,还有android系统自带语音播报功能TTS,是个不错的学习demo。 适合人群:android初学者,具有一定编程基础,java基础,熟悉java多线程应用的同学。 能学到什么:①UI界面绘制、...
课程背景 CRM(客户关系系统)一直是企业中必备的软件系统,企业通过CRM系统,可以建立与客户之间的联系...以邮件任务为集合,将多个邮件变成邮件任务,然后通过线程和其他的一些控制手段,提高邮件发送的准确性。
多线程爬取EMAIL与发送邮件的一个小程序。使用ACESS数据库作为后台数据操作支持。由于开发比较仓促没有对其进行没有和优化,只简单的实现了基本功能。 开放源码,供大家参考。
附带邮件提醒功能,让亲人朋友监督。主要用到xml操作和事件委托。 主要功能: 1、开启即启动显示昨天总结内容,并发送短信给亲友,另其监督 2、每一小时自动弹窗置顶,让你写这一小时的工作学习内容。 3、有周总结...
精准邮件收集营销系统简介 “精准邮件收集营销系统”是专门针对中小企业及个人而开发出来的一套互联网自动化...⒚支持多线程发送,发送速度非其他程序可比。 ⒛自定义要获取的数据包括姓名、电话、QQ、邮箱、地址。