参考:http://blog.csdn.net/ghsau/article/details/17839983

http://blog.csdn.net/never_cxb/article/details/50543289

最近想写一个注册界面,好多的网站注册的时候需要填写邮箱,向邮箱发一个验证链接,怎么实现向邮箱发送验证邮件呢?

Java提供了一个编写邮件,搭建连接,发送邮件的jar包,JavaMail提供了操作的所有工具,我们只需要简单的调用,设置参数,就可以实现Java发送邮件

jar包下载链接:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.7-oth-JPR

下载之后解压里面有一个mail.jar,添加到项目里。

示例代码:

  1. public static void sendMail (){
  2. Properties props = new Properties();
  3. // 开启debug调试
  4. props.setProperty("mail.debug", "true");
  5. // 发送服务器需要身份验证
  6. props.setProperty("mail.smtp.auth", "true");
  7. // 设置邮件服务器主机名
  8. props.setProperty("mail.host", "smtp.qq.com");
  9. // 发送邮件协议名称
  10. props.setProperty("mail.transport.protocol", "smtp");
  11.  
  12. MailSSLSocketFactory sf = null;
  13. Message msg = null;
  14. Transport transport = null;
  15. try {
  16. sf = new MailSSLSocketFactory();
  17. sf.setTrustAllHosts(true);
  18. props.put("mail.smtp.ssl.enable", "true");
  19. props.put("mail.smtp.ssl.socketFactory", sf);
  20.  
  21. // 设置环境信息
  22. Session session = Session.getInstance(props);
  23.  
  24. // 创建邮件对象
  25. msg = new MimeMessage(session);
  26. msg.setSubject("JavaMail测试");
  27. // 设置邮件内容
  28. msg.setText("这是一封由JavaMail发送的邮件!");
  29. // 设置发件人
  30. msg.setFrom(new InternetAddress("19583219822@qq.com"));
  31.  
  32. transport = session.getTransport();
  33. // 连接邮件服务器
  34. transport.connect("发件邮箱", "发件邮箱登录授权码");
  35. // 发送邮件
  36. transport.sendMessage(msg, new Address[] {new InternetAddress("收件邮箱")});
  37. } catch (GeneralSecurityException e) {
  38. e.printStackTrace();
  39. } catch (AddressException e) {
  40. e.printStackTrace();
  41. } catch (NoSuchProviderException e) {
  42. e.printStackTrace();
  43. } catch (MessagingException e) {
  44. e.printStackTrace();
  45. }finally {
  46. // 关闭连接
  47. try {
  48. transport.close();
  49. } catch (MessagingException e) {
  50. e.printStackTrace();
  51. }
  52. }
  53. }

在第三方客户端登录时,密码框请输入授权码

获取授权码的方法(QQ邮箱):登录到qq邮箱找到设置

点击账户

找到POP3服务,点击开启,之后经过验证就可以得到一个授权码

实际测试中发现向qq邮箱中发送邮件程序总会报错,后来经过百度到大神的文章,才知道 QQ 邮箱需要 SSL 加密。

开启 SSL 加密,其他比如163就不需要 SSL 加密……

既然需要加密就加上SSL加密的代码:

  1. MailSSLSocketFactory sf = new MailSSLSocketFactory();
  2. sf.setTrustAllHosts(true);
  3. props.put("mail.smtp.ssl.enable", "true");
  4. props.put("mail.smtp.ssl.socketFactory", sf);

完整代码:

  1. public static void sendMail (){
  2.  
  3. Properties props = new Properties();
  4.  
  5. // 开启debug调试
  6. props.setProperty("mail.debug", "true");
  7. // 发送服务器需要身份验证
  8. props.setProperty("mail.smtp.auth", "true");
  9. // 设置邮件服务器主机名
  10. props.setProperty("mail.host", "smtp.qq.com");
  11. // 发送邮件协议名称
  12. props.setProperty("mail.transport.protocol", "smtp");
  13.  
  14. MailSSLSocketFactory sf = null;
  15. Message msg = null;
  16. Transport transport = null;
  17. try {
  18. sf = new MailSSLSocketFactory();
  19. sf.setTrustAllHosts(true);
  20. props.put("mail.smtp.ssl.enable", "true");
  21. props.put("mail.smtp.ssl.socketFactory", sf);
  22.  
  23. Session session = Session.getInstance(props);
  24.  
  25. msg = new MimeMessage(session);
  26. msg.setSubject("标题");
  27. // 设置邮件内容
  28. msg.setText("邮件内容………………………………");
  29. msg.setFrom(new InternetAddress("发件邮箱"));
  30.  
  31. transport = session.getTransport();
  32. transport.connect("smtp.qq.com", "发件邮箱", "授权码");
  33.  
  34. transport.sendMessage(msg, new Address[] { new InternetAddress("收件邮箱") });
  35. } catch (GeneralSecurityException e) {
  36. e.printStackTrace();
  37. } catch (AddressException e) {
  38. e.printStackTrace();
  39. } catch (NoSuchProviderException e) {
  40. e.printStackTrace();
  41. } catch (MessagingException e) {
  42. e.printStackTrace();
  43. }finally {
  44. try {
  45. transport.close();
  46. } catch (MessagingException e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. }

前面的代码固定,参数也是固定的,其实也很好理解,搭建链接,设置参数,设置邮件内容,发送

运行成功后控制台显示:



为了验证程序,作者注册了一个163邮箱,用QQ邮箱向163邮箱发送邮件,实测是可以接收到的。

基于JavaMail向邮箱发送邮件的更多相关文章

  1. 基于java mail实现简单的QQ邮箱发送邮件

    刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...

  2. JavaMail实现邮箱之间发送邮件功能

    package com.minstone.message.util; import java.util.Date; import java.util.Properties; import javax. ...

  3. 基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)

    在虽然日常生活中,QQ,微信等即时聊天工具几乎主导了人们的生活,但是邮件依然是现代生活不可缺少的一部分.这篇文章主要讲述使用node.js 中的nodemail模块操作阿里云的企业邮箱发送邮件 (52 ...

  4. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  5. 基于JavaMail开发邮件发送器工具类

    基于JavaMail开发邮件发送器工具类 在开发当中肯定会碰到利用Java调用邮件服务器的服务发送邮件的情况,比如账号激活.找回密码等功能.本人之前也碰到多次这样需求,为此特意将功能封装成一个简单易用 ...

  6. 基于javaMail的邮件发送--excel作为附件

    基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...

  7. Java 基于javaMail的邮件发送(支持附件)

    基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户 ...

  8. 基于JavaMail的Java邮件发送:复杂邮件发送

    参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...

  9. Java JavaMail通过SMPT发送邮件

    概述 本讲讲述如何使用JavaMail工具包,通过SMPT协议,在Java代码中发送邮件. 一.JavaMail简介 JavaMail API提供了一个独立于平台且与协议无关的框架来构建邮件和消息传递 ...

随机推荐

  1. elasticsearch-5.1.1使用snapshot接口备份索引

    如果ES是集群,那么需要使用共享存储,支持的存储有:a.shared file systemb.S3c.HDFS 我使用的是第一种,NFS共享文件系统.这里要说一下权限问题,ES一般是使用 elast ...

  2. java异常处理、多态

    第一:GC是什么? 为什么要有GC?  第二:垃圾回收的优点和原理.并考虑2种回收机制.  第三:垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?  第 ...

  3. Integer 与 int

    Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况 例如,要想表达出没 ...

  4. Linux PCI/PCI-E设备配置空间读取与修改

    Linux PCI/PCI-E设备配置空间读取与修改 1 前言 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及 ...

  5. Android常见漏洞

    Android常见漏洞 漏洞名称: Log敏感信息泄露 漏洞描述: 程序运行期间打印了用户的敏感信息,造成泄露 修改建议: 建议禁止隐私信息的log 漏洞名称: web https校验错误忽略漏洞 漏 ...

  6. WIN2003+IIS6+FastCGI+PHP5.3的安装配置

    本文所用的软件的下载地址 fastcgi的下载地址:http://download.microsoft.com/download/E/0/C/E0C0709A-66E5-4113-9A6C-A5F65 ...

  7. Learning part-based templates from large collections of 3D shapse CorrsTmplt Kim 代码调试

    平台: VMware上装的Ubuntu-15.10 环境准备工作:装Fortran, lapack, blas, cblas (理论上装好lapack后面两个应该是自动的),其他的有需要的随时安装就可 ...

  8. val(),text(),html()的区别

    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> ...

  9. intra调用order

    response = orderMessageService.apply(mdpRequest[A1] ); public interface OrderMessageService[A2] { pu ...

  10. JAVA几种缓存技术介绍说明

    OSCache OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案. OSCache有以下特点: 我创建了一个群,群里不定期分享技术 ...