在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. ZOJ 3527

    这题难在破环. 对于不是环的情况,只需按照一般的树形DP来做,一步一步往根递推就可以了.对于环,则枚举其中一点的两种情况,取或不取,然后再递推,就可以了.当到达某结点的下一结点为环开始的点时,退出即可 ...

  2. notifyDataSetChanged()刷新ListView(使用JSONArray绑定的Adapter)

    1.fragment代码: package com.ts.fragment; import java.util.ArrayList; import java.util.HashMap; import ...

  3. RDLC报表钻取空白页问题

    在改动报表查询条件时,钻取页突然空白了,百思不得其解,之前好好的,研究了一个下午和一个晚上.查资料等等,网上非常多资料都是设置报表的 ConsumeConteinerWhitespace = True ...

  4. Java封装FushionCharts

    近期公司接了个关于数据统计的系统.须要用到报表功能.找了几天认为还是FushionCharts 适合.所以就对FushionCharts进行了java代码封装,方便,前台,后台调用. 1.报表Mode ...

  5. luogu1347 排序

    题目大意 一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列.给你一系列形如A<B的关系,并要求你判断是否能够根据这些关系确定这个数列的顺序(能,矛盾,不确定).确定n个元素的顺序后 ...

  6. POJ1837 Balance 背包

    题目大意: 有一个天平,天平左右两边各有若干个钩子,总共有C个钩子(每个钩子有相对于中心的距离,左负右正),有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数. 将每个砝码看作一组,组内各个物品 ...

  7. ubuntu修改capslock键,单独使用为esc,组合使用时为ctrl+

    一.下面这部分可以将capslock与ctrl互换 将下面的代码放入-/.Xmodmap中, remove Lock = Caps_Lock remove Control = Control_L ke ...

  8. php执行运算符

    php执行运算符 简介 php 支持一个执行运算符:反引号(``).反引号(``)位于键盘Tab键左上方.php 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而 ...

  9. Mysql库的操作

    一.系统数据库 执行如下命令,查看系统库 show databases; information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息 ...

  10. Aspose.Words将Word模板打印出来

    利用Aspose.Words将制作好的模板,输出出来自己所需的文件 /// <summary> /// 打印信息和列表 /// </summary> /// <param ...