`
wpf_00
  • 浏览: 43021 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

java邮件:在简单和复杂之间的方案

阅读更多

网站:JavaEye 作者:ahuaxuan 发表时间: 2007-07-11 18:07 此文章来自于 http://www.iteye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://www.iteye.com/topic/100175

Javamail,论坛上由已经有很多的讨论,但是俺觉得还是不够完整,不完整不是说讲的不细致,而是指不全面,而是缺少high level的全面论述,所以俺来补充一下。

这篇文章的名字起得很古怪(估计还有人暗地里说文章名字取得如何如何,文章实质却是水货等等了,先不忙下结论,各位看官接着往下看便知),叫简单和复杂之间,为什么要取这么个奇怪的名字,搞得人一头雾水,其实我想要表达的意思是这样的,之前坛子上有很多人讨论过如何使用javamail(包括spring对其的封装),也有人讨论过如何通过jms发送emal,一个是简单的api介绍,一个是比较复杂的异步方案,但是试问除了简单使用其api难道就只能使用jms来进行异步发送了吗,我们可以再找到一种介于这两者之间的方案,就是concurrent(我的建议是在普通的web应用中邮件发送不需要用jms,但是最好也不要使用同步发送,所以普通的web应该使用concurrent来进行异步邮件发送应该是比较好的选择)。

在普通的web应用中,发送邮件应该只能算小任务,而使用jms来发送邮件有点杀鸡用牛刀的味道,那么如果能建立一个线程池来管理这些小线程并重复使用他们,应该来说是一个简单有效的方案,我们可以使用concurrent包中的Executors来建立线程池,Executors是一个工厂,也是一个工具类,我把它的api的介绍简单的翻译了一下(如果翻译有误请大家不要吝啬手中的砖头)

方  法 说  明
newCachedThreadPool() 创建一个包含新线程的线程池,池中线程的数量需要预先指定,该线程池会复用之前创建的线程(前提是该线程还是有效线程)。如果你的要执行的任务是短生命周期的任务的话,使用这种池提高性能是很具代表性的。这个方法有一个重载
newFixedThreadPool() 创建一个线程池以复用指定数量的线程,如果当所有线程都是活动状态时(指这些线程都在运行),那么新的任务将会等待,知道有空余的线程。如果有任何一个线程因为在运行中发生错误而终结(非正常shutdown),那么如果有新的任务要并发处理,concurrent就会创建一个新的线程放入池中。
newSingleThreadExecutor() 创建一个使用单工作线程的executor,
newScheduledThreadPool() 可调度的线程池,池中的线程可以在某一时间延迟之后执行,也可以周期性执行
newSingleThreadScheduledExecutor() 单一可调度的线程

上面我重点解释了newFixedThreadPool(),因为我们将使用newFixedThreadPool方法来创建一个线程池,这个线程池中存放的线程就是我们用来发送邮件的。代码如下:

代码

这样我们就初始化了线程池的大小,接下来就是如何使用这个线程池中的线程了,我们看看MailService是如何来使用线程池中的线程的,这个类中的代码我已经作了详细的解释

代码

MailService中的EmailEntity是对邮件的抽象(我只使用了失血模型,事实上我们也可以让这个EmailEntity来实现Runnable接口,这样Service中的内部类就可以去掉了,同时service中的大部分代码就要搬到EmailEntity及其父类里了,大家更倾向于怎么做呢?),代码如下:

代码

接下来就是在spring的配置文件中配置这些类了,我相信对熟悉spring的人来说这不是什么大问题:
代码

经过这么一番折腾之后,一个邮件发送的雏形就完成了,接着需要什么样的邮件发送功能就可以随意往MailService里添加内容了, 而如果需要用模板来生成html格式的邮件真的需要看http://www.iteye.com/topic/71430这个贴了,无论你是想用velocity还是想用freemarker来做模板引擎,这个贴中的例子都是可以直接拿来使用的

总结,如果自己起线程来发送邮件是一个非常危险的事情,如果并发一高(比如超过20),服务器估计就快撑不住了,而如果使用jms来异步发送邮件,学习的曲线高,成本也高,我不建议为了一个小小的邮件发送就在项目中导入jms(之所以这样说是因为还有很多项目就是基于webservice的,那么使用jms来调度webservice是一个不错的选择),所以使用线程池来实现这个异步的功能既安全又简单,这个例子是开源的,大家可以在自己的项目中随意修改,随意封装。

要注意的是,concurrent在jdk5.0以上版本中才有,如果你使用的是1.4的jdk需要单独下载concurrent包。

作者:张荣华,未经作者同意不得随意转载!




《 java邮件:在简单和复杂之间的方案 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>

推荐相关文章:
  Spring和IBM的新闻
  Spring2.0例子简解




JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA


分享到:
评论

相关推荐

    简易java邮件发送工具

    总之,“简易java邮件发送工具”利用JavaMail API实现了跨平台的邮件发送功能,对于那些需要定期或批量发送邮件的用户来说,是一个非常实用的解决方案。通过集成不同的邮件服务商和应用服务器,它为开发者提供了一个...

    java源码:Java邮件检验库 JEmval.zip

    总的来说,JEmval是一个强大的Java邮件地址验证库,它的存在为开发者提供了可靠且高效的解决方案,帮助他们避免因邮件格式问题而产生的各种问题。通过深入理解并使用这个库,开发者可以提高其应用程序的质量和用户...

    java收发邮件完整版

    这个"java收发邮件完整版"项目提供了一个完整的Java邮件发送和接收的解决方案,确保用户可以顺利地通过编程方式处理电子邮件。在这个压缩包中,可能包含了一个或多个Java源代码文件,例如"71112303梁洁"和"71112418...

    传智播客张孝祥java邮件开发_Java邮件开发源代码_16(完)

    Java邮件开发是Java编程中的一个重要领域,特别是在企业级应用中,用于发送通知、报告、确认信息等。张孝祥老师的课程“传智播客张孝祥java邮件开发”旨在教授如何利用Java进行邮件的发送和处理。在这个16节的完整...

    java电子邮件系统

    这个系统通常利用JavaMail API来实现SMTP(简单邮件传输协议)和POP3(邮局协议)等邮件服务标准,使得用户能够通过编程接口进行邮件交互。在这个项目中,包含了一个开题报告、源代码以及相关的论文,这表明是一个...

    java 发送邮件 spring发送邮件Mail

    `java邮件系统`和`java邮件收发`则涉及到更广泛的邮件处理概念,包括不仅限于发送,还可能包括接收和解析邮件。 综上所述,Java结合Spring框架发送邮件是一个实用且功能强大的解决方案,通过合理的配置和编程,可以...

    用Java语言实现简单邮件系统

    总的来说,通过JavaMail实现邮件系统,开发者可以结合各种邮件协议,根据实际需求设计出高效、稳定的邮件管理解决方案,同时避免了高昂的成本和复杂的维护问题。这个项目不仅涵盖了技术知识,还涉及到系统设计和优化...

    JAVA实现邮件群发

    这个“JAVA实现邮件群发”的示例程序提供了精炼且实用的解决方案,使得开发者能够轻松地集成邮件发送功能到他们的应用程序中。 首先,我们需要了解JavaMail API,这是Java平台用于处理邮件的接口标准。JavaMail API...

    传智播客张孝祥java邮件开发_Java邮件开发源代码ppt

    通过学习“传智播客张孝祥java邮件开发_Java邮件开发源代码”的课程,开发者不仅可以掌握JavaMail API的基本用法,还能了解到邮件开发的最佳实践和常见问题解决方案。源代码分析将帮助你更好地理解和应用这些知识,...

    基于Java的邮件服务器的设计与实现

    为了提高邮件系统的性能、可维护性和扩展性,本文提出了一种基于Java技术的邮件服务器设计方案,并对其进行了详细的设计与实现。 #### 多层结构模型下的邮件服务器设计 传统的C/S(Client/Server)结构模型虽然在...

    纯java邮件服务器james配置说明

    2. JMail API v1.4.2,这是一个Java邮件API,用于处理邮件发送。 3. JAF API v1.1(JavaBean Activation Framework),它是Java的一个标准API,用于处理邮件中的附件和其他MIME类型的数据。 4. Apache James 2.3.1,...

    java、android邮件开发

    在IT行业中,Java和Android平台的邮件开发是一项常见的任务,特别是在构建企业级应用或服务时。邮件功能可以用于发送通知、验证用户账户、提供客户服务等。在这个场景中,`activation.jar`、`additionnal.jar` 和 `...

    内部简易邮件收发功能java实现

    标题 "内部简易邮件收发功能java实现" 涉及的是使用Java编程语言来构建一个邮件系统,允许用户发送和接收电子邮件。这个话题是IT领域中的一个重要部分,尤其是在企业级应用开发中,因为邮件通信是许多业务流程的核心...

    Java邮件助手(whsvc)

    Java邮件助手(whsvc)是一款基于Java开发的邮件发送工具,它封装了JMail组件,目的是为了简化开发者在使用JMail进行邮件发送时所面临的复杂操作。通过这个工具,开发者可以更加便捷地配置和发送电子邮件,包括添加...

    Java发送邮件的必备jar,亲测完美可用

    在Java编程中,发送电子邮件是一项常见的任务,尤其...综上所述,这个压缩包包含了实现Java邮件发送所需的一切,只需将其导入项目并正确配置,即可轻松发送邮件。对于初学者或开发者来说,这是一个快速上手的实用工具。

    JAVA入门: J2EE的学习流程

    在Java技术体系中,根据不同的应用场景和技术需求,Java主要分为三个版本:J2SE(Java 2 Platform Standard Edition)、J2ME(Java 2 Platform Micro Edition)以及J2EE(Java 2 Platform Enterprise Edition)。...

    java 发送邮件 小工具类+ mail.jar

    这个"java 发送邮件 小工具类+ mail.jar"提供了一个便捷的解决方案。它包含了一个Java类,该类封装了发送电子邮件的过程,以及一个名为`mail.jar`的库,这个库可能包含了JavaMail API,是发送邮件所必需的。 ...

    邮件服务器(Java)

    【邮件服务器(Java)】是基于Java编程语言构建的一个应用程序,它主要负责处理电子邮件的接收与发送,同时具备群发和转发邮件的功能。在Java中实现邮件服务器涉及到多个核心技术点,下面将对这些关键技术进行详细阐述...

    Spring进阶—如何用Java代码实现邮件发送

    总结来说,Spring框架为Java应用程序提供了强大且灵活的邮件发送功能,无论是简单的文本邮件还是复杂的HTML邮件,甚至是包含附件和内嵌资源的邮件,都能通过其高级抽象层轻松实现。同时,配合模板引擎,可以有效地...

Global site tag (gtag.js) - Google Analytics