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

代码:

  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

转载于:https://www.cnblogs.com/zfding/p/8324978.html

javaMail发送邮件实例相关推荐

  1. javamail发送邮件的简单实例[转]

    http://www.blogjava.net/wangfun/archive/2009/04/15/265748.html 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦 ...

  2. javamail发送邮件的简单实例

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  3. JavaMail 发送邮件的实例

    JavaMail是提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便 ...

  4. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  5. JavaMail发送邮件的笔记及Demo

    最近碰到一个需求,就是注册用户时候需要向用户发送激活邮箱,于是照着网上搜来的demo自己试着运行了一下,发件时我用的是网易163邮箱,收件时用QQ邮箱,运行后报了一个错误: 网络上搜索解决方式,多次尝 ...

  6. javamail发送邮件(转)

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  7. javamail发送邮件,解决被垃圾邮件问题

    javamail发送邮件,解决被垃圾邮件问题 参考文章: (1)javamail发送邮件,解决被垃圾邮件问题 (2)https://www.cnblogs.com/mzqworld/articles/ ...

  8. 通过javaMail发送邮件,可选添加多个收件人,密送,抄送,多个附件,超实用

    自己通过学习多人的代码,并整理了一个简单,调用方便的通过javaMail发送邮件.只需填写发件邮箱地址,密码:收件人地址,附件,选择是否保存,设置自己发送邮件时的昵称就ok了.代码自动匹配设置smtp ...

  9. JavaMail发送邮件Demo

    JavaMail发送邮件Demo Maven依赖 <dependency><groupId>org.springframework.boot</groupId>&l ...

最新文章

  1. 工作中MySql的了解到的小技巧
  2. 网络编程 数据报是什么?TCP、UDP数据报结构
  3. [WEB API] CLIENT 指定请求及回应格式(XML/JSON)
  4. ViewGroup.LayoutParams
  5. 编写一个函数,该函数能判断一个英文句子str(带空格)中是否含有某个单词w,如“How old are you?”含有“old”。在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那
  6. Objective C运行时(runtime)技术总结,好强大的runtime
  7. UE4移动平台上基于物理的着色
  8. 华为手机不小心点了始终_年末大盘点:从亲民到旗舰,2020年最值得购买的华为手机...
  9. 服务器远程桌面日志,记录远程桌面连接登录日志的方法及注意事项
  10. Rxjava + retrofit + dagger2 + mvp搭建Android框架
  11. Windows Server 2019/2022域控制器网络位置变为“专用网络”或“公共网络”
  12. zabbix短信告警oracle,zabbix自定义脚本实现短信报警提醒
  13. mfc匹配关键字颜色显示_如何在多台显示器上匹配颜色
  14. 简易的单点登录系统代码实现
  15. python热更新原理_Python功能点实现:数据热更新
  16. mac 邮箱客户端之腾讯企业邮箱设置 无法验证账号或密码
  17. Vue 中实现Video视频不可快进
  18. Linux之jq命令的使用
  19. TCPIP远程网络电子健康码扫码设备|二维码扫码门禁机HX-QR86L-IP在校园复学防疫领域的应用
  20. 【读后感】读《了不起的盖茨比》后感

热门文章

  1. C++/C中const的区别(常量和常变量)
  2. VC++中*.dsp与*.dsw文件各有什么用处
  3. RPC service
  4. 【量化交易笔记】1.数据来源
  5. Confluence 6 自定义站点和空间布局
  6. Python:函数使用
  7. 2021年节假日JSON,全年日期对应的上班日、周末、节假日
  8. TCP/IP详解卷2之插口层
  9. UVA10566 Crossed Ladders(计算几何+二分)
  10. 关于RS485的DMA发送,以及EN使能脚的自动切换