Java 发送Email,Java 邮件发送工具类封装

JSON 2017-05-31 18:30:47 6382

 这几天由于本人的服务器不打算用阿里云了,所以把项目的数据都拷下来,顺便拿些开发过程中的经验来分享给大家,希望一起学习一起进步,代码中有什么错误的请指出,多谢大家观看。

第一篇博客,打算用最早做的一个工具类开头,毕竟很多人在开发过程中会自己封装工具类,此篇文章内容是关于邮件的,直接上代码。 

这个是15年在大三做的一个,于是重新封装了一下:

Java 发送邮件代码封装

public static void sendEmail(String sendEmail, String sendEmailPwd, String title, String content,
      String[] toEmilAddress) throws Exception {

   Properties props = new Properties();
   // 开启debug调试,以便在控制台查看
   props.setProperty("mail.debug", "true");
   // 设置邮件服务器主机名
   props.setProperty("mail.host", "smtp.qq.com");
   // 发送服务器需要身份验证
   props.setProperty("mail.smtp.auth", "true");
   // 发送邮件协议名称
   props.setProperty("mail.transport.protocol", "smtp");
   
   // 开启SSL加密,否则会失败
   MailSSLSocketFactory sf = new MailSSLSocketFactory();
   sf.setTrustAllHosts(true);
   props.put("mail.smtp.ssl.enable", "true");
   props.put("mail.smtp.ssl.socketFactory", sf);
    
   Session session = Session.getInstance(props);
   Message msg = new MimeMessage(session);
     // 发送的邮箱地址
   msg.setFrom(new InternetAddress(sendEmail));
     // 设置标题
   msg.setSubject(title);
     // 设置内容
   msg.setContent(content, "text/html;charset=gbk;");
   Transport transport = session.getTransport();
     // 设置服务器以及账号和密码
     //这里端口改成465
   transport.connect("smtp.qq.com", sendEmail, sendEmailPwd);
     // 发送到的邮箱地址
   transport.sendMessage(msg, getAddress(toEmilAddress));
   transport.close();
  }
 
 

 private static Address[] getAddress(String[] emilAddress) throws Exception {

  Address[] address = new Address[emilAddress.length];
  for (int i = 0; i < address.length; i++) {
   address[i] = new InternetAddress(emilAddress[i]);
  }
  return address; 
} 

上面这段就是我封装成了一个工具类,具体用法注释里都有,原理就是要开启腾讯企业邮箱或者个人邮箱的SMTP 端口(不懂的可以百度,这里不详细说明),之前端口号好像是443 ,测试是不能用的,于是换成了465

对于String sendEmail, String sendEmailPwd这两个参数,其实需要在配置文件里面加上发送人的邮箱和已开启POP3 SMTP 服务的密匙(不是发送人邮箱的密码) 

封装成工具类可能很多人看不懂,所以我准备了个可以直接跑的demo :↓

Java邮件发送测试Demo

public class Demo {

     public static void main(String[] args) throws Exception {

         Properties prop = new Properties();
         prop.setProperty("mail.debug", "true");
         // 设置邮件服务器主机名
         prop.setProperty("mail.host", "smtp.qq.com");
         // 发送服务器需要身份验证
         prop.setProperty("mail.smtp.auth", "true");
         // 发送邮件协议名称
         prop.setProperty("mail.transport.protocol", "smtp");

         // 开启SSL加密,否则会失败
         MailSSLSocketFactory sf = new MailSSLSocketFactory();
         sf.setTrustAllHosts(true);
         prop.put("mail.smtp.ssl.enable", "true");
         prop.put("mail.smtp.ssl.socketFactory", sf);

         // 创建session
         Session session = Session.getInstance(prop);

         // 通过session得到transport对象
         Transport ts = session.getTransport();
         // 连接邮件服务器:邮箱类型,帐号,授权码代替密码(更安全)
         ts.connect("smtp.qq.com", "873******416@qq.com", "rh******be");

         // 创建邮件
         Message message = createSimpleMail(session);
         // 发送邮件
         ts.sendMessage(message, message.getAllRecipients());
         ts.close();
     }

     public static MimeMessage createSimpleMail(Session session)
             throws Exception {
         // 创建邮件对象
         MimeMessage message = new MimeMessage(session);
         // 指明邮件的发件人
         message.setFrom(new InternetAddress("87****16@qq.com"));
         // 指明邮件的收件人
         message.setRecipient(Message.RecipientType.TO, new InternetAddress(
                 "40****474@qq.com"));
         // 邮件的标题
         message.setSubject("QQ邮件测试");
         // 邮件的文本内容
         message.setContent("老子终于能发送邮件了!", "text/html;charset=UTF-8");
         // 返回创建好的邮件对象
         return message;
     }
 }

注:jdk8 以上直接跑会有报错  SSL  错误,于是顺带解决了一下jdk8 发送邮件失败的BUG ,经过一番资料查询,原因是因为保密协议出错具体原因百度找不到,所以我替换了7的两个包,附件里有,在jdk里面下的/jre/lib/security ,然后demo 需要的包网上也有,就是javax.mail.jar ,如果有谁知道jdk8 如何解决SSL 问题的,求告知。。。。  或者能在jdk9 下写了个类似工具类的,欢迎分享经验。

处女贴,求顶=( ̄▽ ̄*)b


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/235.html

转载时必须以链接形式注明原始出处及本声明。


附件下载:

备注:点击文件名下载,附件源来自云端,只能在本站下载。复制下载链接无效。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

相关文章
Http Get 请求,Java 请求工具封装
对Log4j 日志工具封装java LoggerUtils查看和下载
Java Cookie 操作工具
Java 10正式布!增加109项新特性
多说迁移,Java模仿自主实现评论(一)
Java 获取webapp,Root,classpath,项目等路径工具
MySQL触器教程
一些Node.js开发工具、开包、框架等总结
json 解析与生成工具 ,JSON操作讲解(附件)
Javascript 生成UUID,Java生成UUID
最新文章
文件上传漏洞与防御 4058
前端构建工具选型指南:Webpack、Vite、Rollup、esbuild 深度对比 1444
物联网时代2026年时序数据库选型指南 1151
SaaS行业面临AI挑战:从“无限复用”到“灵活适应” 1269
神经网络:从构造到模型训练全链路解析 1168
一文吃透 Redis 核心存储结构:ziplist、listpack 与哈希表扩容 / 并发查询 1593
Linux sudo提权完整指南:从基础用法到生产级安全配置 691
XSS 和 CSRF 的本质区别及开发防御全解析 772
JVM垃圾回收(GC)全维度解析:从原理到调优实战 813
Linux动静态库与ELF加载全解析:从实操制作到底层原理 912
最热文章
免费天气API,天气JSON API,不限次数获取十五天的天气预报 783114
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 711464
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 679993
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 562673
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 512621
Elasticsearch教程(四) elasticsearch head 插件安装和使用 484794
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 302947
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 247433
Elasticsearch教程(一),全程直播(小白级别) 233097
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 228329
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...