您的位置:首页 > 运维架构 > Apache

Apache Commons Mail 初步

2016-03-05 15:04 513 查看
Apache commons mail 是对java自带的 javax.mail 模块的封装。相比之下,apache-mail 显然要好用得多,不过这两者本质上实际是一样的,apache-mail 实际上就是将 javax.mail 中那些让人烦心的邮件配置封装掉了。如下是 apache-mail 的一些常见用法:

1. Maven依赖

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.3.3</version>
</dependency>


apache-mail 的依赖中已经包含了对 javax.mail 的依赖,故不必再加javax.mail 的maven依赖了

2. HtmlEmail的初始化

html格式的邮件应该是实际工作中应用最广的邮件格式了,它既可以是简单的文本,也可以是带样式(CSS)的文本,还可以带附件或者嵌入到文本中的图片等。apache-mail中使用HtmlEmail对象来模拟html格式的邮件,其初始化方式如下:

HtmlEmail mail = new HtmlEmail();
mail.setHostName(hostname); // 邮件服务器域名
mail.setSmtpPort(smtpPort); // 邮件服务器smtp协议端口
mail.setAuthentication(username, password); // 邮箱账户
mail.setCharset(charset); // 邮件的字符集

mail.setSSLOnConnect(true); // 是否启用SSL
mail.setSslSmtpPort(sslSmtpPort); // 若启用,设置smtp协议的SSL端口号

mail.setFrom(from); // 发件人地址
for (String to : toList) {
mail.addTo(to); // 收件人地址,可以设置多个
}


以上只是一些基本的属性,还有一些其它参数诸如抄送(cc)、暗送(bcc)、发送时间(sentDate)等等,可以参考HtmlEmail的API文档

3. 发送普通邮件

mail.setSubject(subject); // 邮件主题
mail.setHtmlMsg(htmlMsg); // 邮件正文
mail.send(); // 发送邮件


如前所述,如果需要有样式的邮件正文,则可以采用html格式的内容,但需要注意的是,邮件正文中不可以引用外部的CSS文件,因此只能通过<style>标签或者页面元素的style属性来定制样式。需要只需要发送简单的文本,那么直接输入普通字符串即可

4. 发送带附件的邮件

EmailAttachment attach = new EmailAttachment(); // 附件对象
attach.setPath(filePath); // 附件文件在系统中的路径
attach.setDisposition(EmailAttachment.ATTACHMENT);

mail.setSubject(subject);
mail.setHtmlMsg(htmlMsg);

mail.attach(attach); // 添加附件
mail.send();


需要注意的是,附件并不是以文件流或者byte数组的形式传给HtmlEmail对象的,而是将它在系统中的路径(相对或绝对)传给一个附件对象EmailAttachment,因此,附件文件必须存储在系统本地环境中

5. 发送内嵌图片的邮件

String cid = mail.embed(picFile); // 将图片嵌入邮件中,返回cid
String img = "<img src='cid:" + cid + "' />"; // 构造img标签,图片源为cid
htmlMsg = htmlMsg.replace(placeHolder, img); // 替换html邮件正文中的占位符

mail.setSubject(subject);
mail.setHtmlMsg(htmlMsg);
mail.send();


与html中的CSS样式类似,内嵌图片的 img标签 所用的文件也不能直接使用外部文件。HtmlEmail提供的方式是先将图片文件通过embed方式嵌入邮件中(其实就是作为附件的形式,只不过方式不同),嵌入后返回文件标识号cid,之后将 img标签 的src属性设置为该cid,就能引用已经嵌入邮件中的图片了。
另外,由于本质上内嵌与附件一样,所以也不能用文件流或者byte数组的形式传递。embed方法只接受String类型的文件路径或者File类型的文件对象,即图片文件仍然要已经存储在系统环境中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: