技术博客

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

信息发布:Sonofabitch 发布日期:2017-05-31 18:30 热度:533 分享到:

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

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

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


附件下载

UnlimitedJCEPolicyJDK7.zip

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

本文主题

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

¥我需要走的更远,点击我 赞助。 如果还有疑问,点击我加群,为你提供最好的解答。


工具导航地图