Commons Email开源项目使用
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开源项目使用相关推荐
- topaz全家桶中文_apache 开源项目全家桶 2020年12月中文介绍
apache项目全家桶 很多apache开源项目特别好,但是没什么能汇总的文档,我来整一个,不定期更新 big-data (50): Project Apache Accumulo star :838 ...
- java 开源项目(大汇总)
Spring Framework [Java开源 J2EE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而 ...
- Java开源项目(备查)
转自:http://www.blogjava.net/Carter0618/archive/2008/08/11/221222.html Spring Framework [Java开源 J2EE框 ...
- 一些优秀的JAVA开源项目
一些优秀的JAVA开源项目 1.构建 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化的 ...
- Apache开源项目分类列表
Apache开源项目分类列表 分类 项目名 说明 开发语言 服务器 (共20) Apache HTTP Server 全球第一HTTP服务器 C/C++ Tomcat Java的Web服务器 Java ...
- python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作
python开源项目贡献 by Utsab Saha 由Utsab Saha 通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributi ...
- 各种好的开源项目-转载
1,豆瓣相册https://github.com/TonnyTao/DoubanAlbum 2,voa在线英语https://github.com/cubewang/NewsReader 3,电竞第一 ...
- 直接拿来用!最火的iOS开源项目
摘要:iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已被弃用,有的则继续发扬光大,新项目更是层出不穷.在本文中,我们将继续为大家介绍20个在GitHub ...
- 8月份Github上最热门的Python开源项目
8月份GitHub上最热门的Python开源项目排行已经出炉啦,一起来看看上榜详情吧: 1 sherlock https://github.com/sherlock-project/sherlock ...
最新文章
- js 光标移动到输入框最后位置函数
- Microsoft .NET Pet Shop 4 架构与技术分析(转)
- Python Django 打印执行过的查询语句
- js如何查看元素类型
- vue复选框组件自定义对勾_vue+element:树级复选框组件使用
- Linux下qwt源码编译,QWT的编译与配置
- oracle Group by 分组查询后,分页
- 我的世界服务器自定义怪物怎么用,我的世界 教你自定义怪物属性
- InletexEMC 多人屏幕共享工具
- smartSVN用法
- linux检测不到声卡设备,解决 Deepin V20、Ubuntu 20.04、Linux Mint 20 声卡无法识别导致的没有声音...
- Mac OS X 下安装Tableau Desktop Pro for Mac 10.2.0
- 移动端HTML5 文件预览及上传
- 代码生成MANIFEST.MF文件
- Linux攻关之基础模块一 系统准备
- 【讲座回顾】不会被AI取代的人
- 自定义View入门实战案例详析 | 蜘蛛网DataShowView
- 《计算机视觉与图像处理》最全总结之就业必备-小白易懂易上手
- 洛谷P2161 [SHOI2009]会场预约【Treap】
- esp8266对接天猫精灵(3)原理