关于使用JavaMail发送邮件
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.util.Date;
import java.util.Properties; /**
* @author <a herf="mailto:yanwu0527@163.com">yanwu</a>
* @date 2019-10-22 14:17.
* <p>
* description: 邮件工具类
*/
@Slf4j
public class EmailUtil {
/*** 发件人地址 */
private static final String SEND_ADDRESS = "xxxxxxx@qq.com";
/*** 发件人账户名 */
private static final String ACCOUNT = "xxxxxxx@qq.com";
/*** 发件人账户密码[注:此密码不是邮箱登陆密码,而是邮箱授权密码] */
private static final String PASSWORD = "xxxxxxx"; private static final String UTF_8 = "UTF-8";
private static final String CONTENT_TYPE = "text/html;charset=UTF-8"; /*** 连接邮件服务器的参数配置 */
private static final Properties PROPERTIES; static {
PROPERTIES = new Properties();
// ----- 设置用户的认证方式
PROPERTIES.setProperty("mail.smtp.auth", "true");
// ----- 设置传输协议
PROPERTIES.setProperty("mail.transport.protocol", "smtp");
// ----- 设置发件人的SMTP服务器地址
PROPERTIES.setProperty("mail.smtp.host", "smtp.qq.com");
} public static void main(String[] args) throws Exception {
String toRecipient = "xxx@163.com";
String[] ccRecipient = {"xxx@qq.com", "xxx@qq.com"};
String subject = "测试邮件";
String content = "尊敬的用户:xxx@qq.com,您的车票已经抢票成功!信息如下:乘客:xx,日期:xxxx-xx-xx,车次:xxx,地点:杭州xx:xx-合肥xx:xx,席别:硬座。请在30分钟内完成付款!更多信息请查询未付款订单。";
String[] attachments = {"F:\\compression\\base_menu.sql", "E:\\log\\tcp-client.log"};
sendEmail(toRecipient, ccRecipient, subject, content, attachments);
} /**
* 发送邮件[使用默认的发件人信息]
*
* @param toRecipient 接收人地址
* @param ccRecipient 抄送人地址 [为null则不抄送]
* @param subject 主题
* @param content 内容
* @param attachments 附件 [为null则表示无附件]
* @throws Exception
*/
public static void sendEmail(String toRecipient, String[] ccRecipient,
String subject, String content, String... attachments) throws Exception {
sendEmail(SEND_ADDRESS, ACCOUNT, PASSWORD, toRecipient, ccRecipient, subject, content, attachments);
} /**
* 发送邮件[使用指定的发件人信息]
*
* @param sendAddress 发送人地址
* @param account 发送人账号
* @param password 发送人密码
* @param toRecipient 接收人地址
* @param ccRecipient 抄送人地址 [为null则不抄送]
* @param subject 主题
* @param content 内容
* @param attachments 附件 [为null则表示无附件]
* @throws Exception
*/
public static void sendEmail(String sendAddress, String account, String password,
String toRecipient, String[] ccRecipient,
String subject, String content, String... attachments) throws Exception {
log.info("发送人: [{}], 接收人: [{}], 抄送人: {}, 主题: [{}], 内容: [{}], 附件: {}", sendAddress, toRecipient, ccRecipient, subject, content, attachments);
// ===== 参数校验
checkParam(sendAddress, "sender address cannot be empty!");
checkParam(account, "sender account cannot be empty!");
checkParam(password, "sender password cannot be empty!");
checkParam(toRecipient, "recipient address cannot be empty!");
checkParam(subject, "mail subject cannot be empty!");
checkParam(content, "mail content cannot be empty!");
// ===== 创建定义整个应用程序所需的环境信息的 Session 对象
Session session = Session.getInstance(PROPERTIES);
// ===== 创建邮件的实例对象
Message msg = getMimeMessage(session, sendAddress, toRecipient, ccRecipient, subject, content, attachments);
// ===== 根据session对象获取邮件传输对象Transport
Transport transport = session.getTransport();
// ----- 设置发件人的账户名和密码
transport.connect(account, password);
// ----- 发送邮件,并发送到所有收件人地址,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(msg, msg.getAllRecipients());
// ===== 关闭邮件连接
transport.close();
} /**
* 获得创建一封邮件的实例对象
*
* @param session session
* @param sendAddress 发送人地址
* @param toRecipient 接收人地址
* @param ccRecipient 抄送人地址
* @param subject 主题
* @param content 内容
* @param attachments 附件
* @return 邮件的实例对象
* @throws Exception
*/
private static MimeMessage getMimeMessage(Session session, String sendAddress,
String toRecipient, String[] ccRecipient,
String subject, String content, String... attachments) throws Exception {
// ----- 创建一封邮件的实例对象
MimeMessage msg = new MimeMessage(session);
// ===== 发件人地址
msg.setFrom(new InternetAddress(sendAddress));
// ===== 收件人地址
msg.setRecipients(MimeMessage.RecipientType.TO, toRecipient);
if (ArrayUtil.isNotEmpty(ccRecipient)) {
// ----- 抄送人
Address[] addresses = new InternetAddress[ccRecipient.length];
for (int i = 0; i < ccRecipient.length; i++) {
String cc = ccRecipient[i];
checkParam(cc, "Cc address cannot be empty!");
addresses[i] = new InternetAddress(cc);
}
msg.setRecipients(MimeMessage.RecipientType.CC, addresses);
}
// ===== 邮件主题
msg.setSubject(subject, UTF_8);
// ===== 邮件处理附件
if (ArrayUtil.isEmpty(attachments)) {
// ----- 邮件正文
msg.setContent(content, CONTENT_TYPE);
} else {
// ----- 附件
MimeMultipart mm = new MimeMultipart();
// ----- 邮件正文
MimeBodyPart text = new MimeBodyPart();
text.setContent(content, CONTENT_TYPE);
mm.addBodyPart(text);
// ----- 处理附件
for (String path : attachments) {
if (StringUtils.isBlank(path)) {
continue;
}
// ===== 创建附件节点
MimeBodyPart attachment = new MimeBodyPart();
// ----- 读取本地文件
DataHandler dh = new DataHandler(new FileDataSource(path));
// ----- 将附件数据添加到节点
attachment.setDataHandler(dh);
// ----- 设置附件的文件名(需要编码)
attachment.setFileName(MimeUtility.encodeText(dh.getName(), UTF_8, null));
mm.addBodyPart(attachment);
}
mm.setSubType("mixed");
msg.setContent(mm);
}
// ----- 设置邮件的发送时间,默认立即发送
msg.setSentDate(new Date());
return msg;
} /**
* 参数校验
*
* @param str 参数
* @param msg 异常信息
*/
private static void checkParam(String str, String msg) {
if (StringUtils.isBlank(str)) {
throw new RuntimeException(msg);
}
}
}
关于使用JavaMail发送邮件的更多相关文章
- JavaMail发送邮件
发送邮件包含的内容有: from字段 --用于指明发件人 to字段 --用于指明收件人 subject字段 --用于说明邮件主题 cc字段 -- 抄送,将邮件发送给收件人的同时抄 ...
- JavaMail发送邮件第一版
首先,我们先来了解一个基本的知识点,用什么工具来发邮件? 简单的说一下,目前用的比较多的客户端:OutLook,Foxmail等 顺便了解一下POP3.SMTP协议的区别: POP3,全名为" ...
- web应用中使用JavaMail发送邮件
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- JavaMail发送邮件的笔记及Demo
最近碰到一个需求,就是注册用户时候需要向用户发送激活邮箱,于是照着网上搜来的demo自己试着运行了一下,发件时我用的是网易163邮箱,收件时用QQ邮箱,运行后报了一个错误: 网络上搜索解决方式,多次尝 ...
- web应用中使用JavaMail发送邮件 。。转载
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...
- JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- javamail发送邮件的简单实例
今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...
- javamail发送邮件的简单实例(转)
今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 注意:要先导入javamail的mail.jar ...
- javamail发送邮件的简单实例(转)
javamail发送邮件的简单实例 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码 ...
随机推荐
- body-parser与querystring与multer的区别
body-parser express中间件 body-parser是用来解析http请求体的,是express默认使用的中间件之一. (只解析post的普通数据请求,无法解析post文件请求) 使用 ...
- Python缩进和选择
Python缩进和选择 缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这 ...
- nginx在win系统下的安装配置与tomcat集成springmvc框架
先来一个常用命令 验证配置是否正确: nginx -t 查看Nginx的版本号:nginx -V 启动Nginx:start nginx 快速停止或关闭Nginx:nginx -s stop 正常停止 ...
- MySQL笔记<一>创建数据库和表
参考博客 https://www.cnblogs.com/sqbk/p/5806797.html https://www.cnblogs.com/tomasman/p/7151962.html
- java-编码解码-流的操作规律
一 编码解码 字符串:String 字节数组:byte[]字符串--编码(getBytes())-->字节数组字节数组--解码(new String(byte[]))-->字符串 publ ...
- ant详细介绍
Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令 ...
- mybatis中使用包装对象
在实际的应用中,很多时候我们需要的查询条件都是一个综合的查询条件,因此我们需要对已经存在的实体进行再一次的包装,以方便我们进行查询操作,于是包装对象的作用就很明显了,在这里我举一个简单的例子 1.首先 ...
- Data Lake Analytics IP白名单设置攻略
当我们成功开通了 DLA 服务之后,第一个最想要做的事情就是登录 DLA 数据库.而登录数据库就需要一个连接串.下面这个页面是我们首次开通 DLA 之后的界面,在这里我们要创建一个服务访问点. 在上面 ...
- LUOGU 3089 后缀排序(模板)
传送门 解题思路 这是一个神奇的算法,sa[i]表示排名第i为的元素是啥,rk[i]表示第i个元素排名是啥.然后使用基数排序+倍增的思想去处理.主要是参考的这位大佬的博客(https://www.cn ...
- LintCode_175 翻转二叉树
题目 翻转一棵二叉树 您在真实的面试中是否遇到过这个题? Yes 样例 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 和前序遍历代码很相似从叶子节点依次翻转递归到根节点C++代码 ...