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给某个人

import org.apache.commons.mail.*;
...

  // 创建网络连接文件的附件
  EmailAttachment attachment = new EmailAttachment();
  attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif"));
  attachment.setDisposition(EmailAttachment.ATTACHMENT);
  attachment.setDescription("Apache logo");
  attachment.setName("Apache logo");

  // 创建邮件消息
  MultiPartEmail email = new MultiPartEmail();
  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邮件,并添加图片。

import org.apache.commons.mail.HtmlEmail;
...

  // 创建邮件消息
  HtmlEmail email = new HtmlEmail();
  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");
  
  // 嵌入图片并获取内容ID
  URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
  String cid = 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类将帮助你解决这个问题通过转换所有的外部图片变为内部图片。

import org.apache.commons.mail.HtmlEmail;
...

  // 加载HTML邮件模板
  String htmlEmailTemplate = ".... <img src=\"http://www.apache.org/images/feather.gif\"> ....";

  // 定义你的根URL去解决相对资源的位置问题
  URL url = new URL("http://www.apache.org");

  // 创建邮件消息
  ImageHtmlEmail email = new ImageHtmlEmail();
  email.setDataSourceResolver(new DataSourceUrlResolver(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)







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值