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

代码:

 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. python3----练习题(三级菜单)

    三级菜单程序. 运行程序输出第一级菜单. 选择一级菜单某项,输出二级菜单,同理输出三级菜单. 退出时返回上一级菜单 menu = { '北京市': { '东城区': { 'aa', 'bb', }, ...

  2. python3 - 使用__slots__限制实例属性

    为了限制实例的属性,可以在定义class的时候,定义一个特殊的__slots__变量,来限制class实例能添加的属性.比如,只允许对Persion实例添加name 和 age 属性 class Pe ...

  3. c语言行编辑程序

    static.h 头文件 typedef struct bufferStatic{ char *top; char *base; int staticSize; }bufferStatic; type ...

  4. adb连接夜神模拟器

    1.打开夜神模拟器,打开设置,调成手机模式,初次进入的话,进入设置,点击版本号5次,可以激活使用开发者模式,进入后打开USB调试功能 2.打开文件资源管理器,进入夜神模拟器的安装位置,在地址栏输入cm ...

  5. PowerDesigner之设置(3)——根据Name首字母生成Code

    SQL版本:2000 PowerDesigner版本:16 网上有不少介绍 PowerDesigner Name/Code自动调整 的文章,但基本如出一辙. 这里,我就介绍下如何根据输入的Name根据 ...

  6. 【BZOJ1190】[HNOI2007]梦幻岛宝珠 分层背包DP

    [BZOJ1190][HNOI2007]梦幻岛宝珠 Description 给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值. ...

  7. cocos2d-x设计模式发掘之一:单例模式

       作者: firedragonpzy  原地址:http://www.firedragonpzy.com.cn/index.php/archives/1781 本系列文章我将和大家一起来发掘coc ...

  8. Spring 缓存注解@Cacheable 在缓存时候 ,出现了第一次进入调用 方法 ,第二次不调用的异常

    代码: @Override @Cacheable(value = CACHE_NAME, key = "'CartItemkey_'+#uId") public List<S ...

  9. typeof的使用技巧

    typeof  对于基本类型,除了  null  都可以显示正确的类型 <template> <section class="p-10"> <el-b ...

  10. 单例 与 static

    单例的构造器是private的,不能直接用new 创建对象.static虽然可以随时使用,但是还是有被重新创建的可能. 举个例子,你希望任何时候有一个class A的实例就可以了class B {  ...