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

代码:

 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. 构造方法与构造块的执行顺序(区别于static)

    小面试题:在类的实例化时,会调用类的构造块(类中的构造块)和构造方法,无论构造方法在前还是在后,都先执行构造块 class Person{ public Person(){ System.out.pr ...

  2. c++ 继承,组合

    .什么是继承 A继承B,说明A是B的一种,并且B的所有行为对A都有意义 eg:A=WOMAN B=HUMAN A=鸵鸟 B=鸟 (不行),因为鸟会飞,但是鸵鸟不会. .什么是组合 若在逻辑上A是B的“ ...

  3. [Docker]学习笔记--搭建gitlab

    Gitlab 是一个用于仓库管理系统的开源项目.使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 详细介绍可以参照官网,https://about.gitlab.com/ 今天主要是通过 ...

  4. Java的四种引用,强弱软虚,用到的场景

    众所周知,java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活).为了解决内存操作不灵活这个问题,可以采用软引用等方法. 在J ...

  5. 封装AFNetworking

    用了一下AFNetworking感觉比ASIHttprequest 真心好用一些,因为我还是个初学者吧,很多ASIHttprequest 的功能还没有用到,与ASIHttprequest 不用的是AF ...

  6. mock数据(模拟后台数据)

    mock数据(模拟后台数据) - Emily恩 - 博客园 https://www.cnblogs.com/enboke/p/vue.html Mock.js http://mockjs.com/ 前 ...

  7. JavaScript遍历IP段内所有IP

    思路:将两个IP转换为数字进行比较,小的那个慢慢加一,直到变成大的那个IP所转换的数字,将这其中的数字再转换为IP地址即为IP段内所有的IP. //IP转数字 function ip2int(ip) ...

  8. java定时器的使用(Timer)(转发:https://blog.csdn.net/ecjtuxuan/article/details/2093757)

    1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等. 对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. private java.util.Tim ...

  9. "深入理解C语言" 指针

    本文对coolshell中的"深入理解C语言"这篇文章中提到的指针问题, 进行简要的分析. #include <stdio.h> int main(void){ ]; ...

  10. 【转】SVN使用教程总结

    看到一篇超赞的文章,原链接:http://www.cnblogs.com/armyfai/p/3985660.html SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成 ...