背景:最近项目里有个实时发送邮件的功能,今天闲下来整理 一下,记录下来方便以后直接使用。

代码:

 package com.dzf.utils;

 import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 邮件发送工具类
* @author xxx
* @date 2018年1月22日
* @time 22:43:40
*/
public class SendEmailUtil implements Runnable {
private static Logger log = LoggerFactory.getLogger(SendEmailUtil.class);
private static Properties prop = new Properties();
private List<String> toEmilList = new ArrayList<String>();//用于指定收件人的邮箱
private List<String> ccEmilList = new ArrayList<String>();//用于抄送的收件人的邮箱
public List<String> getCcEmilList() {
return ccEmilList;
}
public void setCcEmilList(List<String> ccEmilList) {
this.ccEmilList = ccEmilList;
}
public SendEmailUtil(List<String> toEmilList, List<String> ccEmilList) {
super();
this.toEmilList = toEmilList;
this.ccEmilList = ccEmilList;
}
public List<String> getToEmilList() {
return toEmilList;
}
public void setToEmilList(List<String> emilList) {
this.toEmilList = emilList;
}
public SendEmailUtil(List<String> emilList) {
super();
this.toEmilList = emilList;
} public SendEmailUtil() {
super();
}
static{
InputStream in = SendEmailUtil.class.getClassLoader().getResourceAsStream("emil_config.properties");
try {
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
log.error("读取配置失败,异常信息{}",e.toString());
throw new RuntimeException("读取邮件配置文件失败");
}
}
@Override
public void run() {
try {
log.info("邮件创建开始了。。。。");
//1.创建session
Session session = Session.getInstance(prop);
//2.开启session的debug模式,可以查看出email发送的情况
session.setDebug(true);
//3.连接发件服务器
Transport trans = session.getTransport();
trans.connect(prop.getProperty("mail.host"),prop.getProperty("mail.name"), prop.getProperty("mail.password"));
//4.创建邮件
Message message = createMessageMail(session);
//发送邮件
trans.sendMessage(message, message.getAllRecipients());
trans.close();
} catch (Exception e) {
log.error("创建邮件发生异常:异常为{}",e.toString());
e.printStackTrace();
}
}
/**
* 组装邮件
* @param session
*/
private Message createMessageMail(Session session)throws Exception {
//创建邮件对象
MimeMessage mimeMessage = new MimeMessage(session);
//设置邮件的基本信息
//发件人
mimeMessage.setFrom(new InternetAddress(prop.getProperty("mail.from")));
//收件人
InternetAddress[] addressTo = new InternetAddress[toEmilList.size()];
for(int i =0 ;i<toEmilList.size();i++){
addressTo[i]=new InternetAddress(toEmilList.get(i));
}
//抄送人
InternetAddress[] addressCc = new InternetAddress[ccEmilList.size()];
for(int i =0 ;i<ccEmilList.size();i++){
addressCc[i]=new InternetAddress(ccEmilList.get(i));
}
mimeMessage.setRecipients(Message.RecipientType.TO, addressTo);
if(ccEmilList.size()>0){
mimeMessage.setRecipients(Message.RecipientType.CC, addressCc);
}
//邮件标题
mimeMessage.setSubject("私人定制-系统通知"); //邮件正文
MimeBodyPart bodyPart = new MimeBodyPart();
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String str = simple.format(date);
bodyPart.setContent("亲爱得用户:<br/>&nbsp;&nbsp;&nbsp;&nbsp;<p>你好,你与"+str+"登录私人定制,如果不是本人登录,你的密码可能已经泄露!请立即前往官网修改密码。如果是你非别人登录,请你忽略此消息!谢谢!</p>","text/html;charset=utf-8");
//TODO添加附件,图片之类
MimeBodyPart attach = new MimeBodyPart();
File file = new File("e:/generatorConfig.xml");
DataHandler dh= new DataHandler(new FileDataSource(file));
attach.setDataHandler(dh); //描述数据关系
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
multipart.addBodyPart(attach);
mimeMessage.setContent(multipart);
mimeMessage.saveChanges();
return mimeMessage;
}
public static void main(String[] args) {
List<String> toEmilList = new ArrayList<String>();
toEmilList.add("xxxx23319@qq.com");
toEmilList.add("xxxx39686@qq.com");
List<String> ccEmilList = new ArrayList<String>();
ccEmilList.add("xxxx79285@qq.com");
SendEmailUtil email = new SendEmailUtil(toEmilList, ccEmilList);
new Thread(email).start();//启动一个线程
}
}

配置文件 emil_config.properties

 mail.host=smtp.163.com
mail.transport.protocol=smtp
mail.smtp.auth=true
mail.name=xxxxxx@163.com
#shouquanma
mail.password=xxxxxxx
mail.from=xxxxxx@163.com

有关邮件发送遇到的问题我的另一篇随笔里有写  传送门:http://www.cnblogs.com/zfding/p/8324784.html

javaMail发送邮件实例的更多相关文章

  1. javamail发送邮件的简单实例(转)

    javamail发送邮件的简单实例 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码 ...

  2. javamail发送邮件的简单实例

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  3. javamail发送邮件的简单实例(转)

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 注意:要先导入javamail的mail.jar ...

  4. JavaMail发送邮件第一版

    首先,我们先来了解一个基本的知识点,用什么工具来发邮件? 简单的说一下,目前用的比较多的客户端:OutLook,Foxmail等 顺便了解一下POP3.SMTP协议的区别: POP3,全名为" ...

  5. JavaMail发送邮件

    发送邮件包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄 ...

  6. web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  7. JavaMail发送邮件的笔记及Demo

    最近碰到一个需求,就是注册用户时候需要向用户发送激活邮箱,于是照着网上搜来的demo自己试着运行了一下,发件时我用的是网易163邮箱,收件时用QQ邮箱,运行后报了一个错误: 网络上搜索解决方式,多次尝 ...

  8. web应用中使用JavaMail发送邮件 。。转载

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  9. (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...

随机推荐

  1. iOS-tableview【终极方案】精准获取webView内容高度,自适应高度

    关于WebView内容高度的获取,相信很多人都踩过坑,无法获取到准确高度,导致页面布局出现差错,搜到的资料很多但都无法解决问题,以下是个人经验总结: 项目需求实现H5文章&原生评论效果,文章是 ...

  2. CMU-15445 LAB3:事务隔离,two-phase locking,锁管理器

    概述 本lab将实现一个锁管理器,事务通过锁管理器获取锁,事务管理器根据情况决定是否授予锁,或是阻塞等待其它事务释放该锁. 背景 事务属性 众所周知,事务具有如下属性: 原子性:事务要么执行完成,要么 ...

  3. php通过post将表单数据保存到数据库实例

    html的form表单 <form id="contact-form" method="POST" action="../php/msg.php ...

  4. C++ 基础知识回顾(I/O)

    [1] I/O基础 大多数计算机语言的输入输出的实现都是以语言本身为基础的,但是C/C++没有这样做.C语言最初把I/O留给了编译器实现人员.这样做的一个原因是可以提供足够的自由度,使之最适合目标机器 ...

  5. hihoCoder 1549 或运算和

    #1549 : 或运算和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定N个数A1...AN (0 <= Ai < 220) 和一个正整数K,我们用An ...

  6. AngularJS定时器任务

    由于项目需要监测用户在线时长,所以用定时器来实现. /*计算在线时长,一分钟执行一次*/ var stopEvent = $interval(function(){ //每分钟执行一次定时任务 $sc ...

  7. undefined let 作用域

    const o = {uid:123,pid:'wwww'}const wxPayNotifyUrlBizInfo = (o) => { // TODO json let s = '' for ...

  8. 使用QFile进行文件操作(QFile可以使用FILE *指针,还必须指定AutoCloseHandle)

    QFile类我我们提供了操作文件的常用功能.它是一种io设备,可以用来读写文本文件和二进制文件,也可以用来读写Qt的资源文件.QFile类可以单独使用,该类本身提供了read/write函数,但更方便 ...

  9. scrapy+mongodb报错 TypeError: name must be an instance of str

    经过各种排查,最后找到原因,在settings文件中配置文件大小写写错了,在pipelines中 mongo_db=crawler.settings.get('MONGODB_DB'),get 获取的 ...

  10. 《Python 数据分析》笔记——数据的检索、加工与存储

    数据的检索.加工与存储 1.利用Numpy和pandas对CSV文件进行写操作 对CSV文件进行写操作,numpy的savetxt()函数是与loadtxt()相对应的一个函数,他能以诸如CSV之类的 ...