Java实现邮箱验证

JavaMail:

  提供开发者处理电子邮件相关的编程接口,是Sun公司发布处理email的API,可以方便地执行一些常用的邮件传输,我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

JavaMail的用途?

  1 用户注册后,网站发送一封激活邮箱验证

  2 用户生日,发祝福

  3 将最新的动态以邮件形式发送 等等··

邮件开发中的基本术语

  电子邮箱  

  邮箱服务器

  邮件收发协议: SMTP协议(发送邮件)  源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,属于TCP/IP协议簇,帮助每台计算机发送或中转信件时找到下一个目的地,默认端口号25

          POP3协议(接受邮件)  用于支持使用客户端远程管理在服务器上的电子邮件,提供了SSL加密,支持“离线”邮件处理,默认端口号110

  

 Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去 Java 或 Oracle 官网下载。

下载地址:
https://java.net/projects/javamail/pages/Home
或者
http://www.oracle.com/technetwork/java/javamail/index.html

接下来代码实现(以下代码都是我拷贝的,不负责因为我没跑过,公司用到这块都有现成的框架,而且楼主目前完全没用到,一点兴趣都没有,我就是懒,就想拷贝,你要是不满意尽管提出来,反正我又不管你的!!!)

 1 package com.xiets.javamaildemo;
 3 import javax.mail.Session;
 4 import javax.mail.internet.InternetAddress;
 5 import javax.mail.internet.MimeMessage;
 6 import java.io.FileOutputStream;
 7 import java.io.OutputStream;
 8 import java.util.Date;
 9 import java.util.Properties;
10 
11 public class Main {
12 
13     public static void main(String[] args) throws Exception {
14         // 创建一封邮件
15         Properties props = new Properties();                // 用于连接邮件服务器的参数配置(发送邮件时才需要用到)
16         Session session= Session.getDefaultInstance(props); // 根据参数配置,创建会话对象(为了发送邮件准备的)
17         MimeMessage message = new MimeMessage(session);     // 创建邮件对象
18 
19         /*
20          * 也可以根据已有的eml邮件文件创建 MimeMessage 对象
21          * MimeMessage message = new MimeMessage(session, new FileInputStream("MyEmail.eml"));
22          */
23 
24         // 2. From: 发件人
25         //    其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
26         //    真正要发送时, 邮箱必须是真实有效的邮箱。
27         message.setFrom(new InternetAddress("aa@send.com", "USER_AA", "UTF-8"));
28 
29         // 3. To: 收件人
30         message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("cc@receive.com", "USER_CC", "UTF-8"));
31         //    To: 增加收件人(可选)
32         message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));
33         //    Cc: 抄送(可选)
34         message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
35         //    Bcc: 密送(可选)
36         message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));
37 
38         // 4. Subject: 邮件主题
39         message.setSubject("TEST邮件主题", "UTF-8");
40 
41         // 5. Content: 邮件正文(可以使用html标签)
42         message.setContent("TEST这是邮件正文。。。", "text/html;charset=UTF-8");
43 
44         // 6. 设置显示的发件时间
45         message.setSentDate(new Date());
46 
47         // 7. 保存前面的设置
48         message.saveChanges();
49 
50         // 8. 将该邮件保存到本地
51         OutputStream out = new FileOutputStream("MyEmail.eml");
52         message.writeTo(out);
53         out.flush();
54         out.close();
55     }
56 
57 }

发送电子邮件

发送邮件首先需要有一个邮箱账号和密码,本文以网易163邮箱为例,邮箱账号必须要开启 SMTP 服务,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址,如下所示(其他邮箱大同小异):

代码实现

  1 package com.xiets.javamaildemo;
  2 
  3 import javax.mail.Session;
  4 import javax.mail.Transport;
  5 import javax.mail.internet.InternetAddress;
  6 import javax.mail.internet.MimeMessage;
  7 import java.util.Date;
  8 import java.util.Properties;
  9 
 10 public class Main {
 11 
 12     // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
 13     // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”), 
 14     //     对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
 15     public static String myEmailAccount = "xxxxxxxxx@163.com";
 16     public static String myEmailPassword = "xxxxxxxxx";
 17 
 18     // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
 19     // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
 20     public static String myEmailSMTPHost = "smtp.163.com";
 21 
 22     // 收件人邮箱(替换为自己知道的有效邮箱)
 23     public static String receiveMailAccount = "xxxxxxxxx@qq.com";
 24 
 25     public static void main(String[] args) throws Exception {
 26         // 1. 创建参数配置, 用于连接邮件服务器的参数配置
 27         Properties props = new Properties();                    // 参数配置
 28         props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
 29         props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
 30         props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
 31 
 32         // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
 33         //     如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
 34         //     打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
 35         /*
 36         // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
 37         //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
 38         //                  QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
 39         final String smtpPort = "465";
 40         props.setProperty("mail.smtp.port", smtpPort);
 41         props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
 42         props.setProperty("mail.smtp.socketFactory.fallback", "false");
 43         props.setProperty("mail.smtp.socketFactory.port", smtpPort);
 44         */
 45 
 46         // 2. 根据配置创建会话对象, 用于和邮件服务器交互
 47         Session session = Session.getDefaultInstance(props);
 48         session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
 49 
 50         // 3. 创建一封邮件
 51         MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
 52 
 53         // 4. 根据 Session 获取邮件传输对象
 54         Transport transport = session.getTransport();
 55 
 56         // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
 57         // 
 58         //    PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
 59         //           仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
 60         //           类型到对应邮件服务器的帮助网站上查看具体失败原因。
 61         //
 62         //    PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
 63         //           (1) 邮箱没有开启 SMTP 服务;
 64         //           (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
 65         //           (3) 邮箱服务器要求必须要使用 SSL 安全连接;
 66         //           (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
 67         //           (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
 68         //
 69         //    PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
 70         transport.connect(myEmailAccount, myEmailPassword);
 71 
 72         // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
 73         transport.sendMessage(message, message.getAllRecipients());
 74 
 75         // 7. 关闭连接
 76         transport.close();
 77     }
 78 
 79     /**
 80      * 创建一封只包含文本的简单邮件
 81      *
 82      * @param session 和服务器交互的会话
 83      * @param sendMail 发件人邮箱
 84      * @param receiveMail 收件人邮箱
 85      * @return
 86      * @throws Exception
 87      */
 88     public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
 89         // 1. 创建一封邮件
 90         MimeMessage message = new MimeMessage(session);
 91 
 92         // 2. From: 发件人
 93         message.setFrom(new InternetAddress(sendMail, "某宝网", "UTF-8"));
 94 
 95         // 3. To: 收件人(可以增加多个收件人、抄送、密送)
 96         message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
 97 
 98         // 4. Subject: 邮件主题
 99         message.setSubject("打折钜惠", "UTF-8");
100 
101         // 5. Content: 邮件正文(可以使用html标签)
102         message.setContent("XX用户你好, 今天全场5折, 快来抢购, 错过今天再等一年。。。", "text/html;charset=UTF-8");
103 
104         // 6. 设置发件时间
105         message.setSentDate(new Date());
106 
107         // 7. 保存设置
108         message.saveChanges();
109 
110         return message;
111     }
112 
113 }

不清楚的我也没办法啦,去百度吧~~~累死我了,能看懂大致基本上就没问题了,有经验的小伙伴应该看下就能理解~帅帅

原文地址:https://www.cnblogs.com/hzzjj/p/6520400.html