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

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

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

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

这个是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 发送EmailJava 邮件发送工具封装
Http Get 请求,Java 请求工具封装
对Log4j 日志工具封装java LoggerUtils查看和下载
多说迁移,Java模仿自主实现评论(一)
Java Cookie 操作工具
Java 获取webapp,Root,classpath,项目等路径工具
一些Node.js开发工具、开包、框架等总结
Java生成验证码合集(一)简单版
IE、Firefox对同一域名访问并限制,及解决优化方案
Elasticsearch教程,Elasticsearch Java API创建Mapping,指定分词器
最新文章
Macbook teamviewer 突破5分钟,苹果电脑重置 Mac 地址,100%解决限制 220
腾讯云代金券 10000 元/ 30000 代金券领取技巧 324
SEO 换友情链接的主意事项,友情链接断链、友情链接套路说明 229
Springboot + Mybatis,数据库多数据源配置项目Demo【源码下载】 1903
Mac mtr 安装并使用,mrt: command not found 299
Java 集成阿里云消息队列,日志消息存储 497
域名备案注意事项,网站域名ICP备案快速通过攻略【干货分享】 472
Springboot 集成Aliyun MQ消息队列,Aliyun 消息队列配置及代码实现 837
SpringBoot 集成Spring-data-redis,redis对象序列化存储 2029
天气API,全国天气 JSON API接口,可以获取十五天的天气预报 604
最热文章
Elasticsearch教程(四) elasticsearch head 插件安装和使用 126781
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 108004
Elasticsearch教程(六) elasticsearch Client创建 78810
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 74434
Elasticsearch教程(二),IK分词器安装 73217
Elasticsearch教程(一),全程直播(小白级别) 65782
Elasticsearch教程(五) elasticsearch Mapping的创建 61877
Elasticsearch教程(三),IK分词器安装 (极速版) 56361
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 53539
Java 解析JSON,JSON-LIB jar包下载和使用。 48973
支付扫码

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

正在加载... ...