使用Apache commons email发送邮件
今天研究了以下怎么用java代码发送邮件,用的是Apache的commons-email包。
据说这个包是对javamail进行了封装,简化了操作。 这里讲一下具体用法吧
一.首先你需要有邮箱账号和一个授权码。
需要进入到QQ邮箱或者是网易邮箱里面去获取。在邮箱的设置->账户里面,开启如下服务,就能得到一个授权码,这个授权码要好好保管。有了这两个东西就能够通过第三方客户端发送邮件了。

二.导入commons-email的maven依赖。
我用的是1.4,也可以去maven仓库网站(https://mvnrepository.com)上面找别的版本。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.4</version>
</dependency>
三.然后就可以写发送邮件的代码了。
我在网上找了几个案例,如下。
1.发送简单文本邮件。这是最简单也是最常用的。
/**
* @describe 发送内容为简单文本的邮件
* @throws EmailException
*/
public static void sendSimpleTextEmail() throws EmailException {
Email email = new SimpleEmail();
//设置主机名,QQ邮箱是"smtp.qq.com",网易邮箱是"smtp.163.com"
email.setHostName("smtp.163.com");
// 用户名和密码为邮箱的账号和授权码(不需要进行base64编码)
email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
//设置SSL连接,这样写就对了
email.setSSLOnConnect(true);
//设置来源,就是发送方的邮箱地址
email.setFrom("myemailaddress@163.com");
//设置主题,可以不设置
email.setSubject("java发送邮件");
//设置信息,就是内容,这个必须要有
email.setMsg("这是测试邮件 ... :-)");
//接收人邮箱地址
email.addTo("receiveeraddress@qq.com");
email.send();
}
2.发送包含附件的邮件(附件为本地资源),这里用到了一个EmailAttachment对象,也就是附件的意思
/**
* @describe 发送包含附件的邮件(附件为本地资源)
* @throws EmailException
*/
public static void sendEmailsWithAttachments() throws EmailException {
// 创建一个attachment(附件)对象
EmailAttachment attachment = new EmailAttachment();
//设置上传附件的地址
attachment.setPath("C:\\Users\\Administrator\\Pictures\\Saved Pictures\\conti.png");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
//这个描述可以随便写
attachment.setDescription("Picture of conti");
//这个名称要注意和文件格式一致,这将是接收人下载下来的文件名称
attachment.setName("conti.png"); //因为要上传附件,所以用MultiPartEmail()方法创建一个email对象,固定步骤都是一样的
MultiPartEmail email = new MultiPartEmail();
email.setHostName("smtp.163.com");
email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
email.setSSLOnConnect(true);
email.addTo("receiveemail@qq.com", "Conti Zhang");
email.setFrom("myemailaddress@163.com", "Me");
email.setSubject("图片");
email.setMsg("这是发送给你的图片");
//将附件添加到邮件
email.attach(attachment); email.send();
}
3.发送包含附近的邮件(附件为在线资源),这个与上传本地附件稍有区别,注意一下就行
/**
* @describe 发送包含附件的邮件(附件为在线资源)
* @throws EmailException
* @throws MalformedURLException
*/
public static void sendEmailsWithOnlineAttachments() throws EmailException, MalformedURLException {
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.gif"); MultiPartEmail email = new MultiPartEmail();
email.setHostName("smtp.163.com");
email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
email.setSSLOnConnect(true);
email.addTo("receiveemail@qq.com", "Conti Zhang");
email.setFrom("myemailaddress@163.com", "Me");
email.setSubject("The logo");
email.setMsg("Here is Apache's logo");
email.attach(attachment);
email.send();
}
4.发送内容为HTML格式的邮件,有些邮件直接打开就是一个HTML页面。虽然不一定用到,可以了解一下
/**
* @describe 发送内容为HTML格式的邮件
* @throws EmailException
* @throws MalformedURLException
*/
public static void sendHTMLFormattedEmail() throws EmailException, MalformedURLException {
// 这里需要使用HtmlEmail创建一个email对象
HtmlEmail email = new HtmlEmail();
email.setHostName("smtp.163.com");
email.setAuthenticator(new DefaultAuthenticator("myemailaddresss@163.com", "myshouquanma"));
email.addTo("receiveemail@qq.com", "Conti Zhang");
email.setFrom("myemailaddress@163.com", "Me");
email.setSubject("Test email with inline image"); // 嵌入图像并获取内容id,虽然案例这样写,但我感觉直接在html内容里面写图片网络地址也可以
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>"); // 设置替代内容,如果不支持html
email.setTextMsg("你的邮件客户端不支持html邮件");
email.send();
}
5.发送内容为HTML格式的邮件(嵌入图片更方便)
这里用到了DataSourceFileResolver对象,和DataSourceUrlResolver对象,前者可以解析本地文件路径,后者可以解析网络路径
具体用法如下
/**
* @describe 发送内容为HTML格式的邮件(嵌入图片更方便)
* @throws MalformedURLException
* @throws EmailException
*/
public static void sendHTMLFormattedEmailWithEmbeddedImages() throws MalformedURLException, EmailException {
//html邮件模板
String htmlEmailTemplate = "<img src=\"http://www.conti.com/images/1.jpg\">";
DataSourceResolver[] dataSourceResolvers =new DataSourceResolver[]{new DataSourceFileResolver(),new DataSourceUrlResolver(new URL("http://"))};
email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers));
email.setHostName("smtp.qq.com");
email.setAuthenticator(new DefaultAuthenticator("myemailaddress@qq.com", "myshouquanma"));
email.addTo("receiveemail@qq.com", "Conti Zhang");
email.setFrom("myemailaddress@qq.com", "Me");
email.setSubject("Test email with inline image");
email.setHtmlMsg(htmlEmailTemplate);
email.setTextMsg("你的邮件客户端不支持html邮件"); email.send();
}
此种方式可能会报错,会被邮箱认为是有害邮件不接收而导致发送失败。解决方法就是,网易邮箱不行就换QQ邮箱,我就是这样做的
好了,就这么多,欢迎讨论!
使用Apache commons email发送邮件的更多相关文章
- 使用Apache Commons Email 发生邮件
Apache Commons Email的Maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-e ...
- Apache commons email 使用过程中遇到的问题
apache-commons-email是对mail的一个封装,所以使用起来确实是很方便.特别的,官网上的tutorial也是极其的简单.但是我也仍然是遇到了没有解决的问题. jar包的添加 mail ...
- 使用Commons Email发送邮件
Commons Email是apache commons库中的一个组件,对java mail做了一些个封装,提供能为简化的API供开发者使用.它依赖于javax.mail . 首先下载commons- ...
- Apache Commons Email 使用网易企业邮箱发送邮件
最近使用HtmlEmail 发送邮件,使用网易企业邮箱,发送邮件,死活发不出去!原以为是网易企业邮箱,不支持发送邮箱,后面经过研究发现,是apache htmlEmail 的协议导致,apache E ...
- Apache Commons 工具类介绍及简单使用
转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...
- Apache Commons 工具类简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
- Apache Commons 工具集介绍
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
- Apache Commons 工具类介绍及简单使用(转载)
原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...
- Commons Email使用
Apache Commons Email Apache的一个开源项目,是基于另一个开源项目Java Mail上进行封装的,使用起来更加简单方便: http://commons.apache.org/p ...
随机推荐
- vue 使用cli脚手架手动创建项目 相关的选择配置及真正项目的开始
转载https://www.jianshu.com/p/635bd3ab7383 根据上述连接将基本的环境和命令和装好 使用命令行 vue create 项目名称 出现选项 选择手动(没有截图展 ...
- JS中的bind 、call 、apply
# 一 .bind 特点: ### 1.返回原函数的拷贝,我们称这个拷贝的函数为绑定函数 ### 2.将函数中的this固定为调用bind方法时的第一个参数,所以称之为绑定函数.注意是名词而非动词. ...
- Flutter 使用Navigator进行局部跳转页面
老孟导读:Navigator组件使用的频率不是很高,但在一些场景下非常适用,比如局部表单多页填写.底部导航一直存在,每个tab各自导航场景. Navigator 是管理路由的控件,通常情况下直接使用N ...
- Alpha冲刺——总结随笔
这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.项目预期计划: ...
- Java实现 LeetCode 775 全局倒置与局部倒置(分析题)
775. 全局倒置与局部倒置 数组 A 是 [0, 1, -, N - 1] 的一种排列,N 是数组 A 的长度.全局倒置指的是 i,j 满足 0 <= i < j < N 并且 A ...
- Java实现 蓝桥杯 算法训练 排序
算法训练 排序 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. ...
- Java实现 LeetCode 523 连续的子数组和(ง •_•)ง
523. 连续的子数组和 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数. 示 ...
- Java实现 蓝桥杯VIP 基础练习 Sine之舞
问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个"Sine之舞"的游戏,寓教于乐,提高奶牛们的计算能力 ...
- Java实现最大流量问题
1 问题描述 何为最大流量问题? 给定一个有向图,并为每一个顶点设定编号为0~n,现在求取从顶点0(PS:也可以称为源点)到顶点n(PS:也可以称为汇点)后,顶点n能够接收的最大流量.图中每条边的权值 ...
- java实现扑克牌移动
/* 下面代码模拟了一套扑克牌(初始排序 A~K,共 13 张)的操作过程. 操作过程是: 手里拿着这套扑克牌,从前面拿一张放在后面,再从前面拿一张放桌子上,再从前面拿一张放在后面,.... 如此循环 ...