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

Sonofabitch 2017-05-31 18:30:47 1869

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

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

这个是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

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


附件下载:

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

本文主题:

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

相关文章
Java 解析JSON,JSON-LIB jar包下载和使用。
JSON.stringify 函数 (JavaScript)讲解
怎么合理管理、提高Javascript的性能
json 解析与生成工具类 ,JSON操作讲解(附件)
Javascript 删除节点后是否需要将手动将事件解绑?
JavaScript function 类型的使用说明
国外程序员整理的Java资源大全(全部是干货)
一些Node.js开发工具、开发包、框架等总结
Java服务端监控平台设计
Java生成验证码合集(一)简单版
最新文章
ICP怎么操作取消备案,企业、个人怎么自己申请取消备案? 19
Javascript 加密/压缩后运行不了,JavaScript报错排查讲解 44
JavaScript 不可逆加密问题排查之方案一(闭包优化) 45
Java爬虫,Jsoup 爬取大众点评、美团商家信息电话号码解决方案 244
分解质因数 JavaScript 计算方式,及分解质因数讲解 8
湖南腾众4s店服务怎么样?进来看看你就知道了 29
SEO 之 SpringMVC redirect 301,301和302区别详细讲解 82
网站如何设置404页面、500等错误页面,有什么漏洞?怎么预防? 103
Java 文字转图片输出,Java 输出透明背景图片,Java文字转图片防爬虫 155
HttpClient获取访问域名的真实ip,HttpClient请求获取目标IP地址 299
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 175222
Elasticsearch教程(四) elasticsearch head 插件安装和使用 138315
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 118027
Elasticsearch教程(六) elasticsearch Client创建 81991
Elasticsearch教程(一),全程直播(小白级别) 77107
Elasticsearch教程(二),IK分词器安装 77063
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 76749
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 75292
Elasticsearch教程(五) elasticsearch Mapping的创建 69399
Elasticsearch教程(三),IK分词器安装 (极速版) 58152
支付扫码

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

正在加载... ...