- 浏览: 185128 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 4403简介 倒排索引源 ... -
大数据处理--BitSet
2014-06-28 11:01 1251java.util.BitSet可以按位存储。计算机中一个字 ... -
大数据处理--BloomFilter
2014-06-28 10:58 918BloomFilter——大规 ... -
hadoop 2.x升级异常
2014-06-19 11:54 22891、通过FileSystem这个API去访问hdfs上面的 ... -
Windows 编译Hadoop的Eclipse插件
2013-07-24 00:53 0http://www.cnblogs.com/fly ... -
log4j指定配置文件路径
2013-07-09 11:15 1940在默认情况下 log4j 会从WEB-INF/cl ... -
使用CXF发布和调用webservice
2013-05-08 16:14 1404依赖的JAR cxf-2.2.10.jar je ... -
Filter、Servlet、Listener区别与联系
2013-04-10 17:41 4188J2EE开发中,经常会使用到Filter、Servlet、L ... -
Apache POI组件使用eventusermodel模式读取Excel文档内容
2013-03-18 17:39 9124package com.test; import ja ... -
CXF之JAX-WS(转)
2012-12-18 17:31 1989CXF详解二 CXF之JAX-WS JAX-WS规范是一组 ... -
分析tomcat假死现象的过程
2012-10-15 15:50 0前段时间在公司遇到一个tomcat运行一段时间后(半个月左右 ... -
spring mail 通过HTTP代理发送邮件
2012-09-24 16:22 6674spring框架中org.spr ... -
使用Spring mail通过socks代理发送邮件
2012-09-14 18:25 7143Spring框架提供了JavaMailSender接口及其实 ... -
plupload 上传组件,后台用java实现
2012-09-06 17:21 11497Plupload 是一个Web浏览器上的界面友好的文件上传模 ... -
POI读取大数据量的Excel文件
2012-09-06 11:58 15074POI读取Excel文件有两种方式,一种是使用usermod ... -
UML类图
2012-08-02 16:35 2048UML类图关系大全 1、关联双向关联:C1-C2:指 ... -
使用cxf的wsdl2java是遇到的问题
2012-03-13 10:50 3919对与同一个wsdl文件,我尝试过使用axis2是可以正常转过来 ... -
spring mail 发送邮件,没有主题,没有收件人,显示乱码问题
2012-03-06 14:02 4706使用spring框架风中的javamail发送邮件,遇到了一些 ... -
J2EE使用ireport做导出PDF操作
2012-03-02 17:21 2699首先,在lib中,加入一下jar: jasperreport ... -
Struts使用plupload实现多文件上传
2012-03-02 17:06 2561plupload,一个挺不错js框架。到时其官方demo中只是 ...
相关推荐
接下来,**Smtp发邮件及配置** 是实现邮件发送的核心。SMTP(Simple Mail Transfer Protocol)是互联网标准协议,用于发送电子邮件。开发者需要配置SMTP服务器的连接参数,并使用SMTP客户端库(如Python的smtplib,...
总之,多线程定时任务邮件服务是Java开发中一项实用的功能,它综合运用了多线程、定时任务、邮件发送和数据库操作等技术,旨在提升系统的自动化程度和信息传递效率。在实际开发中,我们需要关注并发控制、任务调度、...
本课程设计的目标是利用Python实现多进程发送邮件的功能。 首先,我们需要了解Python中的`multiprocessing`模块,它是Python提供的一个标准库,用于实现多进程。通过创建子进程,每个进程可以独立地执行任务,互不...
在IT行业中,多线程定时任务邮件服务是一个常见的需求,特别是在服务器管理和自动化运维场景下。这个服务能够定期执行某些任务,并通过电子邮件的方式将结果或通知发送给相关人员。下面,我们将详细探讨这一主题。 ...
附带邮件提醒功能,让亲人朋友监督。主要用到xml操作和事件委托。 主要功能: 1、开启即启动显示昨天总结内容,并发送短信给亲友,另其监督 2、每一小时自动弹窗置顶,让你写这一小时的工作学习内容。 3、有周总结...
在本示例中,我们关注的是如何利用C#实现一个定时发送邮件的功能。这个功能通常在需要定期向用户发送通知、报告或其他重要信息的场景下非常有用。我们将探讨以下几个关键知识点: 1. **System.Net.Mail**: 这是.NET...
标题中的".Net版多线程邮件自动发送软件"是指一个基于.NET框架开发的程序,它具备多线程功能,能够高效地批量发送电子邮件。多线程技术是编程中提高程序执行效率的重要手段,特别是在需要处理大量并发任务时,如本例...
总之,".Net用线程来实现定时发送邮件"这个项目结合了.NET的多线程技术、定时器和电子邮件服务,创建了一个能够按预定时间间隔自动发送邮件的实用工具。开发者可以借此学习和理解如何在.NET环境中实现并发和定时任务...
在这个"多线程发邮件MailThreadCallble学习资料分享c"的主题中,我们主要探讨的是如何利用Java的多线程技术来实现高效的邮件发送功能。下面将详细讲解相关知识点。 1. **线程基础**:在Java中,线程是程序执行的...
**Multi Mail 2.0** 是一款专门设计用于批量发送电子邮件的软件,它支持通过多线程技术同时向指定的SMTP服务器发送大量的邮件。这款工具的主要特点在于其高效的多线程处理能力,使得邮件发送速度得以显著提升,尤其...
在PHP开发中,为了提升效率和性能,我们经常会利用Swoole扩展来实现异步、并行处理任务,比如批量发送...在实际应用中,开发者需要理解并掌握多进程编程、Swoole特性和邮件发送的相关知识,才能有效地实现这一功能。
在Android平台上实现邮件发送功能是一项常见的任务,尤其对于开发者来说,了解如何正确地集成和使用邮件服务至关重要。这里我们将深入探讨如何使用`commons-net-3.3.jar`和`mail.jar`这两个核心邮件包来实现在...
关于C++的特性,此案例可能会用到模板、异常处理、流(iostream)操作、STL(Standard Template Library)容器,如字符串和向量,以及可能的多线程(并发发送邮件)。模板可以实现代码重用,异常处理保证程序在遇到...
总结,设计一个高效的多线程异步邮件发送系统需要结合多线程、异步编程以及邮件处理的专业知识。通过合理利用线程池、异步任务提交和错误处理机制,我们可以创建一个高效、稳定的邮件发送服务。在实际项目中,应根据...
8. **多线程或异步处理**:如果需要同时发送多封邮件,可以考虑使用多线程或异步I/O技术,提高程序效率。 在这个“SendMail-master”项目中,开发者可能已经实现了上述功能,并提供了示例代码供学习。分析和理解这...
本篇文章将详细介绍如何利用 C# 和 ASP.NET MVC 实现发送邮件的功能,并支持多个邮箱格式。 #### 二、关键组件介绍 1. **MailMessage 类**:这是用于构建邮件信息的对象,包括发件人、收件人、主题和内容等。 - `...
对于账号为139移动邮箱还可以发送邮箱中的手机短信,及大的方便了不支持POP3收发邮件的邮箱实现批量发送邮件功能。邮件内容可以使用HTML邮件编辑。 多线程登录多个邮箱同时发送 ---快发邮件想不快都难。 目前系统...
### 多线程计数实现多线程执行后再执行主线程 #### 一、知识点概述 本文将深入探讨如何利用`CountDownLatch`机制来确保多个子线程完成各自的任务后,再让主线程继续执行的方法。这种方法在项目开发中非常实用,...
本文将详细介绍如何使用C#的`System.Net.Mail`命名空间来实现邮件功能。 首先,你需要引入`System.Net.Mail`命名空间,这样就可以使用其中的类和方法了。在C#代码文件的开头添加以下引用: ```csharp using System...
这个"java实现发送邮件jar文件"是JavaMail的一个实现,封装了SMTP(简单邮件传输协议)和其他相关协议,使得开发者能够轻松地集成邮件功能到他们的项目中。 在Java中实现邮件发送,首先需要引入JavaMail的相关依赖...