在Web开发中,发邮件是一种非常常见的功能或任务。

发送邮件的6种方式 一文提到了6种方法,文章发表后,有网友指出了还有另外一种方法,Ant中也可以发送邮件。

打开Foxmail之类的邮件客户端或者在网页中写邮件,用户写邮件的主要输入就是以下6个字段。

必选输入:收件人地址
可选输入:抄送人地址,按送人地址,主题,正文,附件

API

如果,我们从现实世界这些功能来看,发邮件功能是可以提取为一个API的。

/**
* 发送邮件。
*
* @param toList
* 收件人列表
* @param ccList
* 抄送人列表
* @param bccList
* 暗送人列表
* @param subject
* 邮件主题
* @param content
* 邮件正文
* @param attachmentList
* 附件列表
* @throws EmailException
*/
public void sendEmail(List<String> toList, List<String> ccList, List<String> bccList,
String subject, String content,   List<EmailAttachment> attachmentList);

 为了方便使用者调用,可以再增加一些API,比如
/**
* 发送邮件。
*
* @param toList
* 收件人列表
* @param subject
* 邮件主题
* @param content
* 邮件正文
* @throws EmailException
*/
public void sendEmail(List<String> toList, String subject, String content);

Web服务
发送邮件这个功能,其实也可以成为一个公共服务。

Java/C++/C/PHP等各种项目都可以使用同一个服务。

服务需要的参数除了API之外的参数之外,可能需要再增加用户名、密码、KEY之类的公共参数。
而这3个公共参数在服务中几乎是必须的,因此把发送邮件API服务化,并没有增加额外的需要维护的参数。

API和Web服务的好处(前提是需求相同或类似)
1.同一项目和不同项目,提高软件复用,避免重复代码。
2.测试更简单。
3.维护和扩展更方便。
4.降低了研发成本,提高了研发效率。

API源码
特别说明:源码只包含API实现的,Web服务的没有实现(工作中用不到),有兴趣的可以自己实现。
版权说明:只要承认源码是小雷-leiwen@fansunion.cn所写,可以用于任何用途(修改、商业用途等)。
下面简要介绍下源码:

EmailSender:邮件发送器。定义了一系列发送邮件的工具方法。
EmailPropertyReader:读取Email配置属性,email.properties配置文件和本类在同一个路径下,或者在classpath路径下。
EmailUtils:发送邮件用到的一些工具方法。
EmailConstant:定义了"mail.smtp.host"等常量。
SendHtmlEmail:一个简单的测试。
(发送邮件关键需要配置自己的帐号和密码,我是根据自己的域名邮箱测试的)

源码下载http://download.csdn.net/detail/fansunion/6222261

原文链接http://FansUnion.cn/articles/2337

提高生产力:发送邮件API和Web服务(包含源码)的更多相关文章

  1. vs2008编译FileZilla服务端源码

    vs2008编译FileZilla服务端源码 FileZilla服务端下载地址:https://download.filezilla-project.org/server/.FileZilla服务端源 ...

  2. Spring Cloud Eureka服务注册源码分析

    Eureka是怎么work的 那eureka client如何将本地服务的注册信息发送到远端的注册服务器eureka server上.通过下面的源码分析,看出Eureka Client的定时任务调用E ...

  3. 单元测试Struts2Spring项目的Action和Service(包含源码)

    最近,认真实践了单元测试Struts2.Spring等Java项目,今天特意写的是单元测试Struts2Spring项目的Action和Service. 由于已经写过不少Web开发框架单元测试的代码, ...

  4. sofa-rpc 服务端源码流程走读

    sofa-rpc是阿里开源的一款高性能的rpc框架,这篇文章主要是对sofa-rpc provider启动服务流程的一个代码走读,下面是我简单绘制的一个基本的关系流程图 下面我们根据sofa-rpc代 ...

  5. Zookeeper 源码(四)Zookeeper 服务端源码

    Zookeeper 源码(四)Zookeeper 服务端源码 Zookeeper 服务端的启动入口为 QuorumPeerMain public static void main(String[] a ...

  6. bash-2 httpd服务的源码编译安装脚本

    httpd服务的源码编译安装脚本 #!/bin/bash # #******************************************************************** ...

  7. 用HTML5、地理定位API和Web服务来开发移动应用

    HTML 5 是一项让人振奋的技术,这有着充分的理由.这将会是一次技术突破,因为它可以将桌面应用程序功能带入浏览器中.除了传统浏览器外,对于移动浏览器,其潜力甚至更大.不仅如此,最流行的移动浏览器甚至 ...

  8. ASP.NET---如何使用web api创建web服务

    1 首先创建asp.net web空项目,并且创建模拟数据,我在工程下面创建了一个Models文件夹,在文件夹Nodels下面创建类Product和Repository 具体如下: [Serializ ...

  9. 电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...

随机推荐

  1. Eclipse快捷操作

    Eclipse快捷操作 快捷操作,包含了一些鼠标的操作: 学习了:http://www.cnblogs.com/iamfy/archive/2012/07/11/2586869.html 自己体会了一 ...

  2. 使用 F# 列表

    使用 F# 列表 在 C# 中使用 F# 的列表,是全然可能的,可是,我建议不要用,由于,仅仅要再做一点,就会使事情在 C# 看来更加自然.比如,把列表转换成数组非常easy.用List.toArra ...

  3. leetcode_num179_Largest Number

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  4. 虚拟机window7与主机之间文件复制设置

    一.需要安装VMware Tools 选中虚拟机>虚拟机>安装VMware Tools 一直点击下一步直至完成 二.设置文件共享 选定实体机需要共享给虚拟机的文件夹,并为该共享起一个名称. ...

  5. Activiti的简单入门样例(经典的请假样例)

    经典的请假样例: 流程例如以下,首先须要部门经理审批.假设请假天数大于2天,则须要总经理审批,否则HR审批就可以 一:创建maven项目,项目结构例如以下: watermark/2/text/aHR0 ...

  6. CentOS6.8 安装 mysql 5.6

    安装前的准备: 1.确认是否安装过mysql: yum list installed | grep mysql 2.删除系统自带的mysql及其依赖命令: yum -y remove mysql-li ...

  7. Additive equations--zoj

    Additive equations Time Limit: 10 Seconds      Memory Limit: 32768 KB We all understand that an inte ...

  8. strlen和mb_strlen

    在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别.下面通过例子,讲解这两者之间的区别. 先看例子: <?php // ...

  9. php如何将网上的图片下载到本地

    <?phpheader("Content-Type: application/force-download");header("Content-Dispositio ...

  10. Windows下Python + AutoCAD 多义线绘图小结

    简介 在windows下台下, 使用comtypes库, 通过ActiveX操作autocad, 从而读取AutoCAD数据 comtypes.client AutoCAD ActiveX GetAc ...