Apache Commons Mail 初步
2016-03-05 15:04
513 查看
Apache commons mail 是对java自带的 javax.mail 模块的封装。相比之下,apache-mail 显然要好用得多,不过这两者本质上实际是一样的,apache-mail 实际上就是将 javax.mail 中那些让人烦心的邮件配置封装掉了。如下是 apache-mail 的一些常见用法:
apache-mail 的依赖中已经包含了对 javax.mail 的依赖,故不必再加javax.mail 的maven依赖了
以上只是一些基本的属性,还有一些其它参数诸如抄送(cc)、暗送(bcc)、发送时间(sentDate)等等,可以参考HtmlEmail的API文档
如前所述,如果需要有样式的邮件正文,则可以采用html格式的内容,但需要注意的是,邮件正文中不可以引用外部的CSS文件,因此只能通过<style>标签或者页面元素的style属性来定制样式。需要只需要发送简单的文本,那么直接输入普通字符串即可
需要注意的是,附件并不是以文件流或者byte数组的形式传给HtmlEmail对象的,而是将它在系统中的路径(相对或绝对)传给一个附件对象EmailAttachment,因此,附件文件必须存储在系统本地环境中
与html中的CSS样式类似,内嵌图片的 img标签 所用的文件也不能直接使用外部文件。HtmlEmail提供的方式是先将图片文件通过embed方式嵌入邮件中(其实就是作为附件的形式,只不过方式不同),嵌入后返回文件标识号cid,之后将 img标签 的src属性设置为该cid,就能引用已经嵌入邮件中的图片了。
另外,由于本质上内嵌与附件一样,所以也不能用文件流或者byte数组的形式传递。embed方法只接受String类型的文件路径或者File类型的文件对象,即图片文件仍然要已经存储在系统环境中
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类型的文件对象,即图片文件仍然要已经存储在系统环境中
相关文章推荐
- Apache高级篇------页面重定向!!!
- Apache高级篇------页面重定向!!!
- Apache Felix Event Admin在ServiceMix容器下使用
- apache的三种虚拟主机应用场景!!!
- Apache Maven 入门篇
- 如何查看 apahce 已经加在的模块
- Apache的三种MPM模式比较:prefork,worker,event
- Caused by: Unable to load bean: type:com.opensymphony.xwork2.ObjectFactory class:org.apache.struts2.
- SPRING IN ACTION 第4版笔记-第六章RENDERING WEB VIEWS-005- 使用ApacheTiles(TilesConfigurer、TilesViewResolver、<put-attribute>、<t:insertAttribute>)
- org.apache.commons.collections.CollectionUtils
- Apache自签ssl证书
- 一个LRUMap的实现——来自apache common-collections框架
- apache2.4配置php5.6.19出现“Cannot load F:/php5.6.19/php5apache2_4.dll into server”错误
- apache 连接数
- apache2 在ubuntu上的文件路径与常用命令
- Ubuntu下安装和配置Apache2
- apache mod_concatx模块 合并多个js/css 提高网页加载速度
- apache实现虚拟主机
- php安装后检测不成功,apache无法解析php
- java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher