Java发送邮件验证码
前言
本文章除了给你现成的发送源码前,希望大家能好好了解下关于收发邮件的一些常识和业务,请您耐心完整地看完。若你是未使用 过 API 来发送邮箱验证码,相信您一定会恍然大悟。
一. 邮件收发流程介绍
请大家看下上面的图;当发件人和收件人都是同一个网站的email账户(比如QQ),小明 给 小红 发一封邮件,则小明则是客户端1,小红是客户端2;中间的邮件服务器则是QQ邮件服务器;这种情况属于同一邮件服务器发送邮件。
二. 邮件收发协议
一般 发邮件 需要遵守SMTP协议,收邮件遵守POP3协议;简单了解即可。
三. 不同服务器的邮件收发过程
有时候我们有这样的需求:我使用163.com的邮箱账号 发邮件给 qq.com的账号,那邮件的收发流程就如上图所示。
四. 如何使用Java发送邮件
在编码前,需要开通两个服务;以QQ为例,需要做下面的工作:
上面的工作完成,下面开始编码。
1. 设置依赖,如下:
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.5</version> </dependency> </dependencies>
2. 发邮件代码(改为你们的邮箱和授权码等):
public static boolean sendEmail(String emailaddress, String code) { //emailaddress是收件人的邮箱地址,code是邮箱验证码;记住一点:邮箱验证码是由我们自己决定的 try { HtmlEmail email = new HtmlEmail();//能发邮箱的一个对象 email.setHostName("smtp.qq.com");//设置邮件服务器的名称。这里是发件人的邮箱服务器;比如你用qq邮箱,那就是smtp.qq.cm;126邮箱为smtp.126.com,163邮箱为163.smtp.com email.setCharset("UTF-8"); email.addTo(emailaddress);// 收件人的邮箱地址 email.setFrom("xxxx@qq.com", "aa");//此处填发件人邮箱地址和用户名,用户名可以任意填写 email.setAuthentication("xxxx@qq.com", "dmonqclqxgtvgaej");//发件人的邮箱地址 和 发件人的授权码;这个授权码是需要发件人提前开通和生成的 //此处填写邮箱地址和客户端授权码 email.setSubject("孙大大通讯");//此处填写邮件主题 email.setMsg("尊敬的用户您好,您本次注册的验证码是:" + code);//设置邮件正文 email.send(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
3. 测试。
public static void main(String[] args) { sendEmail("xxxx@qq.com", "440"); }