Commons Email介绍

Commons Email是一个提供发送邮件的API。它是基于Java Mail API开发的项目,目的是为使用更加简单。

Commons Email官网地址:http://commons.apache.org/proper/commons-email/index.html

Commons Email下载地址:http://commons.apache.org/proper/commons-email/download_email.cgi

Commons Email当前的版本是1.4,Java5以上支持。

它根据邮件类型的不同主要提供如下几个邮件类:

  • SimpleEmail - 这个类主要用于发送基本的文本内容的邮件。
  • MultiPartEmail - 这个类允许你发送多部分消息的邮件。 这个类允许发送的文本消息携带内嵌的或者附加的附件内容。
  • HtmlEmail - 这个类将被用于发送带有html内容的邮件.它拥有所有MultiPartEmail功能同时允许附件能够容易的被添加。它也支持内嵌图片的内容。
  • ImageHtmlEmail - 这个类将被用于发送带有html内容的邮件同时可以内嵌图片。它拥有所有HtmlEmail的功能,但变换图像为内联图像的引用。
  • EmailAttachment - 它是一个简单的容器类允许非常容易的去处理附件。它被使用伴随着MultiPartEmail的HtmlEmail实例对象

发送邮件类型主要类的使用:

一个简单的文本邮件

这个例子将创建一个基本的邮件消息给“John Doe”并且发送邮件通过你的Google Mail (GMail) 账号。

Email email= newSimpleEmail();

//设置发送邮件的主机名称

email.setHostName("smtp.googlemail.com");

//设置发送邮件主机的端口号

email.setSmtpPort(465);

//设置发送邮件人的用户名和密码

email.setAuthenticator(newDefaultAuthenticator("username","password"));

//设置是否需要SSL安全连接

email.setSSLOnConnect(true);

//设置邮件发送人

email.setFrom("user@gmail.com");

//邮件主题

email.setSubject("TestMail");

//邮件内容

email.setMsg("This is a test mail ... :-)");

//设置收件人

email.addTo("foo@bar.com");

//执行邮件发送

email.send();

email.setHostName("smtp.googlemail.com");这种调用方式设置的SMTP服务器的地址被用于发送邮件使用。如何没有调用setHostName()方法,系统属性的"mail.host"将被使用。

发送带有附件的邮件

import org.apache.commons.mail.*;

...

// 创建附件

EmailAttachment attachment= newEmailAttachment();

attachment.setPath("mypictures/john.jpg");

attachment.setDisposition(EmailAttachment.ATTACHMENT);

attachment.setDescription("Picture of John");

attachment.setName("John");

//创建邮件消息

MultiPartEmail email= newMultiPartEmail();

email.setHostName("mail.myserver.com");

email.addTo("jdoe@somewhere.org","John Doe");

email.setFrom("me@apache.org","Me");

email.setSubject("The picture");

email.setMsg("Here is the picture you wanted");

// 添加附件

email.attach(attachment);

// 发送邮件

email.send();

也可以使用EmailAttachment去引用任何一个有效的文件的URL而不使用本地文件。下面这个例子展示我们可以发送Apache Logo给某个人

importorg.apache.commons.mail.*;...// 创建网络连接文件的附件EmailAttachmentattachment=newEmailAttachment();attachment.setURL(newURL("http://www.apache.org/images/asf_logo_wide.gif"));attachment.setDisposition(EmailAttachment.ATTACHMENT);attachment.setDescription("Apache logo");attachment.setName("Apache logo");// 创建邮件消息MultiPartEmailemail=newMultiPartEmail();email.setHostName("mail.myserver.com");email.addTo("jdoe@somewhere.org","John Doe");email.setFrom("me@apache.org","Me");email.setSubject("The logo");email.setMsg("Here is Apache's logo");// 添加附件email.attach(attachment);// 发送邮件email.send();

发送HTML格式的邮件

发送Html格式的邮件是通过HtmlEmail类完成的。HtmlEmail类工作确切的像MultiPartEmail类伴随一些额外的方法去设置HTML内容,替代的文字内容如果收件人不支持HTML邮件,并添加图片。

importorg.apache.commons.mail.HtmlEmail;...// 创建邮件消息HtmlEmailemail=newHtmlEmail();email.setHostName("mail.myserver.com");email.addTo("jdoe@somewhere.org","John Doe");email.setFrom("me@apache.org","Me");email.setSubject("Test email with inline image");// 嵌入图片并获取内容IDURL url=newURL("http://www.apache.org/images/asf_logo_wide.gif");Stringcid=email.embed(url,"Apache logo");// 设置HTML消息email.setHtmlMsg("<html>The apache logo - <img src=\"cid:"+cid+"\"></html>");// 设置替代的文本内容email.setTextMsg("Your email client does not support HTML messages");// 发送邮件email.send();

首先调用embed()方法返回一个字符串,这个字符串是一个随机生成的标识,这个标识必须被使用去引用在图片标签中的图片。

其次,在这个例子中没有调用setMsg()方法。这个方法可以在HTMLEmail类中调用,但是它不应该被使用如果你将正在使用嵌入图片功能。相反,setHtmlMsg()和setTextMsg()方法被使用。

发送嵌入图片的Html格式的邮件

上面的例子展示怎么去创建一个嵌入图片的HTML格式的邮件,但你需要知道所有的图像,当使用HTML电子邮件模板,这是不方便的。这个ImageHtmlEmail类将帮助你解决这个问题通过转换所有的外部图片变为内部图片。

importorg.apache.commons.mail.HtmlEmail;...// 加载HTML邮件模板StringhtmlEmailTemplate=".... <img src=\"http://www.apache.org/images/feather.gif\"> ....";// 定义你的根URL去解决相对资源的位置问题URL url=newURL("http://www.apache.org");// 创建邮件消息ImageHtmlEmailemail=newImageHtmlEmail();email.setDataSourceResolver(newDataSourceUrlResolver(url));email.setHostName("mail.myserver.com");email.addTo("jdoe@somewhere.org","John Doe");email.setFrom("me@apache.org","Me");email.setSubject("Test email with inline image");// 设置HTML消息email.setHtmlMsg(htmlEmailTemplate);// 设置替换消息email.setTextMsg("Your email client does not support HTML messages");// 发送邮件email.send();

首先我们创建一个引用一些图片的HTML邮件模板。所有的引用图片自动转变给内联图片通过指定DataSourceResolver。

调试

这个JavaMail API支持一些调试选项将是非常有用的,如果你运行出现一些问题。你能够激活调试在任何一个邮件类中,通过调用setDebug(true)。这个调试输出通过System.out输出。

有时你想尝试各种安全设置或共享电子邮件的功能。一个好的起点是测试类emaillivetest和emailconfiguration用以测试共享电子邮件与真正的SMTP服务器。

认证

如果你需要验证你的SMTP服务器,你可以调用setauthentication(用户名,密码)方法在发送电子邮件之前。这将创建一个实例的defaultauthenticator将由JavaMail API使用当电子邮件发送时。你的服务器必须支持rfc2554为了这个工作。

你可以做一个更复杂的认证方法,如显示一个对话框给用户通过创建一个javax.mail.authenticator它的子类。你将需要重写getpasswordauthentication()方法在你会处理收集用户的信息的地方。利用你的新的Authenticator类,使用email.setauthenticator方法。

安全

现在使用公共SMTP服务器时不应该使用纯SMTP协议,但是这有一些混淆可用的选项。

两个通用的选项正在使用:

  • STARTTLS on port 25
  • SSL on port 465

下面定义的来自于Wikipedia:

STARTTLS是纯文本通信协议的扩展,从而提供了一种方法提升纯文本连接加密(TLS或SSL加密通信)而不是使用一个单独的端口为加密连接。

传输层安全(TLS)和它的前身,安全套接字层(SSL),是加密协议,提供通信安全的通过internet。tls和SSL加密网络连接的运输层以上的部分,使用非对称加密的密钥交换,对于隐私的对称加密、消息完整性和消息认证码。

额外的你能够强制设置安全核查:

使用一个安全的运输(STARTTLS或SSL)你可以强制通过调用电子邮件验证服务器的证书通过调用setsslcheckserveridentity(true)。
强制使用STARTTLS的电子邮件通过调用setstarttlsrequired(true)

Commons Email开源项目使用相关推荐

  1. topaz全家桶中文_apache 开源项目全家桶 2020年12月中文介绍

    apache项目全家桶 很多apache开源项目特别好,但是没什么能汇总的文档,我来整一个,不定期更新 big-data (50): Project Apache Accumulo star :838 ...

  2. java 开源项目(大汇总)

    Spring Framework [Java开源 J2EE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而 ...

  3. Java开源项目(备查)

    转自:http://www.blogjava.net/Carter0618/archive/2008/08/11/221222.html Spring Framework  [Java开源 J2EE框 ...

  4. 一些优秀的JAVA开源项目

    一些优秀的JAVA开源项目 1.构建  Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化的 ...

  5. Apache开源项目分类列表

    Apache开源项目分类列表 分类 项目名 说明 开发语言 服务器 (共20) Apache HTTP Server 全球第一HTTP服务器 C/C++ Tomcat Java的Web服务器 Java ...

  6. python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作

    python开源项目贡献 by Utsab Saha 由Utsab Saha 通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributi ...

  7. 各种好的开源项目-转载

    1,豆瓣相册https://github.com/TonnyTao/DoubanAlbum 2,voa在线英语https://github.com/cubewang/NewsReader 3,电竞第一 ...

  8. 直接拿来用!最火的iOS开源项目

    摘要:iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已被弃用,有的则继续发扬光大,新项目更是层出不穷.在本文中,我们将继续为大家介绍20个在GitHub ...

  9. 8月份Github上最热门的Python开源项目

    8月份GitHub上最热门的Python开源项目排行已经出炉啦,一起来看看上榜详情吧: 1 sherlock https://github.com/sherlock-project/sherlock ...

最新文章

  1. js 光标移动到输入框最后位置函数
  2. Microsoft .NET Pet Shop 4 架构与技术分析(转)
  3. Python Django 打印执行过的查询语句
  4. js如何查看元素类型
  5. vue复选框组件自定义对勾_vue+element:树级复选框组件使用
  6. Linux下qwt源码编译,QWT的编译与配置
  7. oracle Group by 分组查询后,分页
  8. 我的世界服务器自定义怪物怎么用,我的世界 教你自定义怪物属性
  9. InletexEMC 多人屏幕共享工具
  10. smartSVN用法
  11. linux检测不到声卡设备,解决 Deepin V20、Ubuntu 20.04、Linux Mint 20 声卡无法识别导致的没有声音...
  12. Mac OS X 下安装Tableau Desktop Pro for Mac 10.2.0
  13. 移动端HTML5 文件预览及上传
  14. 代码生成MANIFEST.MF文件
  15. Linux攻关之基础模块一 系统准备
  16. 【讲座回顾】不会被AI取代的人
  17. 自定义View入门实战案例详析 | 蜘蛛网DataShowView
  18. 《计算机视觉与图像处理》最全总结之就业必备-小白易懂易上手
  19. 洛谷P2161 [SHOI2009]会场预约【Treap】
  20. esp8266对接天猫精灵(3)原理

热门文章

  1. CSS3 线性渐变循环动画
  2. C++高阶 RAII机制(以对象管理资源)
  3. 教你如何鉴别原装和组装线孔耳机
  4. 获取、设置响应头、设置缓冲区
  5. Mapbox 加载自定义 WMS 数据源
  6. ubuntu18.04 安装惠普打印机驱动GUI界面
  7. 仙剑5手游服务器维护,《仙剑奇侠传》手游维护内容官方解答
  8. H3C官方模拟器HCL(H3C Cloud Lab)
  9. 快递扫地机器人被损坏_熬夜秒到的扫地机器人丢了 快递公司最多赔几十元
  10. js中获取只包含一种字符的最长非空子字符串的长度