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

代码:

  1. package com.dzf.utils;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.List;
  10. import java.util.Properties;
  11.  
  12. import javax.activation.DataHandler;
  13. import javax.activation.FileDataSource;
  14. import javax.mail.Message;
  15. import javax.mail.Session;
  16. import javax.mail.Transport;
  17. import javax.mail.internet.InternetAddress;
  18. import javax.mail.internet.MimeBodyPart;
  19. import javax.mail.internet.MimeMessage;
  20. import javax.mail.internet.MimeMultipart;
  21.  
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24.  
  25. /**
  26. * 邮件发送工具类
  27. * @author xxx
  28. * @date 2018年1月22日
  29. * @time 22:43:40
  30. */
  31. public class SendEmailUtil implements Runnable {
  32. private static Logger log = LoggerFactory.getLogger(SendEmailUtil.class);
  33. private static Properties prop = new Properties();
  34. private List<String> toEmilList = new ArrayList<String>();//用于指定收件人的邮箱
  35. private List<String> ccEmilList = new ArrayList<String>();//用于抄送的收件人的邮箱
  36. public List<String> getCcEmilList() {
  37. return ccEmilList;
  38. }
  39. public void setCcEmilList(List<String> ccEmilList) {
  40. this.ccEmilList = ccEmilList;
  41. }
  42. public SendEmailUtil(List<String> toEmilList, List<String> ccEmilList) {
  43. super();
  44. this.toEmilList = toEmilList;
  45. this.ccEmilList = ccEmilList;
  46. }
  47. public List<String> getToEmilList() {
  48. return toEmilList;
  49. }
  50. public void setToEmilList(List<String> emilList) {
  51. this.toEmilList = emilList;
  52. }
  53. public SendEmailUtil(List<String> emilList) {
  54. super();
  55. this.toEmilList = emilList;
  56. }
  57.  
  58. public SendEmailUtil() {
  59. super();
  60. }
  61. static{
  62. InputStream in = SendEmailUtil.class.getClassLoader().getResourceAsStream("emil_config.properties");
  63. try {
  64. prop.load(in);
  65. } catch (IOException e) {
  66. e.printStackTrace();
  67. log.error("读取配置失败,异常信息{}",e.toString());
  68. throw new RuntimeException("读取邮件配置文件失败");
  69. }
  70. }
  71. @Override
  72. public void run() {
  73. try {
  74. log.info("邮件创建开始了。。。。");
  75. //1.创建session
  76. Session session = Session.getInstance(prop);
  77. //2.开启session的debug模式,可以查看出email发送的情况
  78. session.setDebug(true);
  79. //3.连接发件服务器
  80. Transport trans = session.getTransport();
  81. trans.connect(prop.getProperty("mail.host"),prop.getProperty("mail.name"), prop.getProperty("mail.password"));
  82. //4.创建邮件
  83. Message message = createMessageMail(session);
  84. //发送邮件
  85. trans.sendMessage(message, message.getAllRecipients());
  86. trans.close();
  87. } catch (Exception e) {
  88. log.error("创建邮件发生异常:异常为{}",e.toString());
  89. e.printStackTrace();
  90. }
  91. }
  92. /**
  93. * 组装邮件
  94. * @param session
  95. */
  96. private Message createMessageMail(Session session)throws Exception {
  97. //创建邮件对象
  98. MimeMessage mimeMessage = new MimeMessage(session);
  99. //设置邮件的基本信息
  100. //发件人
  101. mimeMessage.setFrom(new InternetAddress(prop.getProperty("mail.from")));
  102. //收件人
  103. InternetAddress[] addressTo = new InternetAddress[toEmilList.size()];
  104. for(int i =0 ;i<toEmilList.size();i++){
  105. addressTo[i]=new InternetAddress(toEmilList.get(i));
  106. }
  107. //抄送人
  108. InternetAddress[] addressCc = new InternetAddress[ccEmilList.size()];
  109. for(int i =0 ;i<ccEmilList.size();i++){
  110. addressCc[i]=new InternetAddress(ccEmilList.get(i));
  111. }
  112. mimeMessage.setRecipients(Message.RecipientType.TO, addressTo);
  113. if(ccEmilList.size()>0){
  114. mimeMessage.setRecipients(Message.RecipientType.CC, addressCc);
  115. }
  116. //邮件标题
  117. mimeMessage.setSubject("私人定制-系统通知");
  118.  
  119. //邮件正文
  120. MimeBodyPart bodyPart = new MimeBodyPart();
  121. SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  122. Date date = new Date();
  123. String str = simple.format(date);
  124. bodyPart.setContent("亲爱得用户:<br/>&nbsp;&nbsp;&nbsp;&nbsp;<p>你好,你与"+str+"登录私人定制,如果不是本人登录,你的密码可能已经泄露!请立即前往官网修改密码。如果是你非别人登录,请你忽略此消息!谢谢!</p>","text/html;charset=utf-8");
  125. //TODO添加附件,图片之类
  126. MimeBodyPart attach = new MimeBodyPart();
  127. File file = new File("e:/generatorConfig.xml");
  128. DataHandler dh= new DataHandler(new FileDataSource(file));
  129. attach.setDataHandler(dh);
  130.  
  131. //描述数据关系
  132. MimeMultipart multipart = new MimeMultipart();
  133. multipart.addBodyPart(bodyPart);
  134. multipart.addBodyPart(attach);
  135. mimeMessage.setContent(multipart);
  136. mimeMessage.saveChanges();
  137. return mimeMessage;
  138. }
  139. public static void main(String[] args) {
  140. List<String> toEmilList = new ArrayList<String>();
  141. toEmilList.add("xxxx23319@qq.com");
  142. toEmilList.add("xxxx39686@qq.com");
  143. List<String> ccEmilList = new ArrayList<String>();
  144. ccEmilList.add("xxxx79285@qq.com");
  145. SendEmailUtil email = new SendEmailUtil(toEmilList, ccEmilList);
  146. new Thread(email).start();//启动一个线程
  147. }
  148. }

配置文件 emil_config.properties

  1. mail.host=smtp.163.com
  2. mail.transport.protocol=smtp
  3. mail.smtp.auth=true
  4. mail.name=xxxxxx@163.com
  5. #shouquanma
  6. mail.password=xxxxxxx
  7. 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. php 工厂方法模式

    #使用工厂方法模式是不知道要创建类的对象有哪些.interface IFactory{ public function CreateOperation();#工厂方法模式只有单个产品 } class ...

  2. iOS 数组的去重(普通的无序的去重和排序好的去重)

    本文转载至 http://blog.csdn.net/zhaopenghhhhhh/article/details/24972645 有时需要将NSArray中去除重复的元素,而存在NSArray中的 ...

  3. iOS学习笔记(四)——iOS应用程序生命周期

    开发应用程序都要了解其生命周期,开始接触android时也是从应用程序生命周期开始的,android的应用程序生命周期更多是其组件的生命周期,例如Activity.Service.今天我们接触一下iO ...

  4. 编写自己的ls命令

    ····要编写ls命令,首先要了解它能做什么,完成了什么工作,是如何完成这些工作的····  一.ls命令能做什么? 我们在命令行输入ls,ls默认找出当前目录中所有文件的文件名,并且按照字典序排序后 ...

  5. poj1676(转换为二进制求解)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13175 题目关键:将0~9十个数转换为二进制数进行枚举比较 int ...

  6. 【BZOJ4825】[Hnoi2017]单旋 线段树+set

    [BZOJ4825][Hnoi2017]单旋 Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能 ...

  7. 关于angularjs的select下拉列表存在空白的解决办法

    angularjs 的select的option是通过循环造成的,循环的方式可能有ng-option或者</option  ng-repeat></option>option中 ...

  8. dfs-求连通块

    状态:若为W则继续搜索 import java.util.Scanner; public class Main { static int n,m; static char[][] field; sta ...

  9. spark2.0.2基于hadoop2.4搭建分布式集群

    一.Scala安装 因为spark的版本原因,所以Scala我用的2.11.7. 下载目录http://www.scala-lang.org/download/ 拷贝到要安装的地址,我的地址是/usr ...

  10. JS 插件 fastclick.js 解决手机端click点击延迟

    FastClick 是一个简单,易于使用的JS库用于消除在移动浏览器上触发click事件与一个物理Tap(敲击)之间的300延迟. 对于非移动浏览器不启作用,禁用缩放标签. <meta name ...