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

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

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

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

这个是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 请求工具封装
Java Cookie 操作工具
对Log4j 日志工具封装java LoggerUtils查看和下载
Java 10正式布!增加109项新特性
多说迁移,Java模仿自主实现评论(一)
Java 获取webapp,Root,classpath,项目等路径工具
一些Node.js开发工具、开包、框架等总结
Java服务端监控平台设计
IE、Firefox对同一域名访问并限制,及解决优化方案
Java 实现在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具
最新文章
PHP变量剖析 11
SQL全外连接剖析 119
SQL自然连接剖析 147
springboot启动原理 245
SQL右连接【RIGHT JOIN】详解及图解 450
SQL左链接【LEFT JOIN】详解及图解 357
SQL非等值连接剖析 262
SQL等链接剖析 291
SQL内连接详解及图解 385
python之numpy常用的100种数值相关方法及代码示例 231
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 679241
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674561
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 599031
免费天气API,天气JSON API,不限次数获取十五天的天气预报 565278
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 551715
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509186
Elasticsearch教程(四) elasticsearch head 插件安装和使用 479645
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 262820
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244092
Elasticsearch教程(一),全程直播(小白级别) 225127
支付扫码

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

查看我的收藏

正在加载... ...