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

代码:

 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. day13迭代器与生成器

    三个作业: # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 login_dic = {'alex':False} def ...

  2. 庖丁解牛:USB 驱动开发技术彻底解密

    我们知道如果开发工程师不懂RS232 肯定会让人笑话可以想象面向未来USB 接口无处不在因此掌握USB 的原理固件编程及其驱动开发技术势必成为当务之急USB 即插即用的优点和灵活性运用于各种电子产品现 ...

  3. iOS开发常见问题(不断更新)

    1.如何从程序退出到桌面 在单击事件中 exit(0);即可. 2.如何强制横屏 在你需要横屏的控制器里加入如下代码 - (BOOL)shouldAutorotate{ return NO; } - ...

  4. 微信小程序结构分析

    1.Console页面:控制台信息页两个作用: (1)开发直接输入代码并且进行调试: (2)显示小程序的错误输出: 2.Sources页面:源文件调试信息页,用于显示当前项目的脚本文件. 3.Netw ...

  5. redis字典的底层实现hashTable

    Redis的字典使用哈希表作为底层实现.一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对 哈希表的数据结构为 table属性是一个数组,数组中的每个元素都是指向dictE ...

  6. sql server 2008 对字段的操作

    添加,刪除字段 通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数   增加字段:  增加数字字段,整型,缺省值为0 增加数字 ...

  7. 2588: Spoj 10628. Count on a tree

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5766  Solved: 1374 ...

  8. SharePoint服务器端对象模型 之 对象模型概述(Part 2)

    (三)Url 作为一个B/S体系,在SharePoint的属性.方法参数和返回值中,大量的涉及到了Url,总的来说,涉及到的Url可以分为如下四类: 绝对路径:完整的Url,包含了协议头(http或h ...

  9. 关于js的当前日期的格式化,和两个日期之间的相减的天数

    function getFormatYMD(timesamp){ var date = new Date(timesamp); Y = date.getFullYear() + '-'; M = (d ...

  10. JavaScript中对事件简单的理解

    事件(event) 1.什么是JavaScript事件? 事件是文档或浏览器中发生的特定交互瞬间. 2.事件流 事件流描述的是从页面中接受事件的顺序,包含IE提出的事件冒泡流与Netscape提出的事 ...