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

代码:

 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. EditText相关属性设置

    1.默认不弹出软件盘 在AndroidManifest.xml设置: <activity            android:name="com.demo.Activity" ...

  2. W​o​r​d​P​r​e​s​s​常​用​标​签​和​调​用​总​结

    调用头部模板<?php get_header();?> 调用尾部模板<?php get_footer();?> 调用侧边栏<?php get_sidebar();?> ...

  3. linux stress 压测命令的使用

    一.stress工具安装:1.获取stress源码安装包(stress-1.0.4.tar.gz)3.解压并安装 [root@localhost /]#cd /tmp/ [root@localhost ...

  4. 《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合

    原创文章,欢迎转载.转载请注明:关东升的博客 数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. v ...

  5. 从ELK到EFK

    https://my.oschina.net/itshare/blog/775466 http://blog.51cto.com/467754239/1700828 日志系统 日志就是程序产生的,遵循 ...

  6. Linux下OpenOffice的安装与启动

    公司项目需求中增加了文档预览功能,所以采用了OpenOffice提供的将office文件转换为pdf的工具.那么我们的程序运行在服务器端,服务器系统版本多是Linux,因此有必要记录下Linux下Op ...

  7. POJ 1125 Stockbroker Grapevine【floyd简单应用】

    链接: http://poj.org/problem?id=1125 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  8. Exponential Backoff

    f^x(f^y+f-m)+f-n =f^(x+y)+f^(f-m)+(f-n) <?php $exponent=0; w(80,3); function w($input,$base){ glo ...

  9. IBM WebSphere cannot start in RAD 9.1

    Have solved the problem. Solutions follows Step 1: double click on "WebSphere Application Serve ...

  10. python问号堂--第二篇

    1.分别书写数字5,10,32,7的二进制表示? 5---0b101      10---0b1010     32---0b100000    7---0b111 以上结果可以bin()来检测 2. ...