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 }
不清楚的我也没办法啦,去百度吧~~~累死我了,能看懂大致基本上就没问题了,有经验的小伙伴应该看下就能理解~帅帅
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!