JavaMail实现邮箱验证码

  笔者最近在学习系统登录使用的邮箱验证码的功能实现,下面给出使用JavaMail实现发送邮箱验证码的代码。本代码使用的是163的邮件服务器,可以根据需要更换别的服务器。

import java.util.Arrays;
import java.util.Properties;
import java.util.Random;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendEmail {

    public static String send(String email) {
        Properties p = new Properties();
        p.put("mail.smtp.host", "smtp.163.com");  //smtp服务器地址,可以使用别的
        p.put("mail.smtp.auth", "true");
        Authenticator authenticator = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("(您的163邮箱)","(您的邮箱密码)");
            }
        };
        //获得一个带有authenticator的session实例
        Session sendMailSession = Session.getDefaultInstance(p,authenticator);
        Message mailMessage = new MimeMessage(sendMailSession);

        //产生4位验证码
        Random r = new Random();
        StringBuffer captcha1 = new StringBuffer();
        for (int i = 0; i < 4; i++) {
            captcha1.append(r.nextInt(9)+"");
        }
        String captcha = new String(captcha1);

        try {
            System.out.println("I‘m sending...");
            Address from = new InternetAddress("(您的163邮箱)");
             //设置发出方
            mailMessage.setFrom(from);
            Address to = new InternetAddress(email);//设置接收人员
            mailMessage.setRecipient(Message.RecipientType.TO, to);
            mailMessage.setSubject("验证码");//设置邮件标题
            mailMessage.setText(captcha); //设置邮件内容
            // 发送邮件
            Transport.send(mailMessage);
            return captcha;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        SendEmail.send("[email protected]");
    }

}

  上面是发送验证码的实现。如果要实现日常我们注册时正常的功能,即需要控制验证码的有效时间,最简单的可以使用cookie实现,设置cookie过期时间即可。也可以借助数据库来实现,即注册时在用户表插入用户信息,同时保存发送验证码的时间,当用户输入验证码后可以查询数据库保存的时间与当前时间比较即可实现,而且,我们可以在用户表中添加一个status字段,判断用户是注册成功还是尚未注册成功。

  至于日常我们碰到的通过向邮箱发送激活邮件,用户点击激活邮件激活账户的也同样类似,可以在数据库中保存一个随机的key值,然后在发送的链接后面拼接用户id还有随机key,用户点击后取出链接的用户id和key值即可判断哪个用户已经成功注册。

时间: 2024-08-01 04:09:24

JavaMail实现邮箱验证码的相关文章

javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

引言: 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  --> javamail模拟邮箱功能发送电子邮件-基础实战篇 上一篇章简单讲解了javamail发送邮件的基本基础和用到的几个类,并且所有初始化和发送方法都封装在一个类里面(为了代码方便演示),本章节将对各个模块进行拆分和优化,并且引入附件发送的方法 要想邮件发送附件,就要引入两个新类  Multipart 和 BodyPart 两类 Multipart(报文部件容器) 实则为一个报文容器,而邮件消息  Msage 是由各个子

javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】(javamail API电子邮件实例)

前言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 本章可能是讲解javamail的最后一篇了,上次更新完查看方法后,本打算周末更新的,没想今天周五挺闲,就地正法算了...就赶紧再下班前写完了.阅读本章节前建议阅读之前章节,因为这章是在之前的基础上增加的业务方法,不看之前的可能有点云里雾里.  点我前往 邮件标志:是指给邮件message对象设置一个Flag内部类里的属性字段,标志类型会

javamail模拟邮箱功能收取电子邮件-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)

引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  -->javamail模拟邮箱功能发送电子邮件-中级实战篇[新增附件发送方法](javamail API电子邮件实例) 在上一篇中,讲解了邮件发送的两个基本方法(HTML和附件),并且引入了两个新类 Multipart 和 BodyPart 两类,整体结构比较紧凑,邮件的服务

javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  -->javamail模拟邮箱功能获取邮件内容-中级实战篇[内容|附件下载方法](javamail API电子邮件实例) 在上一篇中,讲解了邮件获取内容的两个方法(HTML和附件),简单介绍了邮件发送和内容获取的相同和不同之处,并且引入了新类-->javax.mail.St

发送短信验证码和邮箱验证码—Java实现

短信验证码 短信验证码都是调用一些接口来进行短信的发送,短信验证码在登录.注册等操作中使用的最广泛,本文这一节演示如何使用Java制作一个简单的短信验证码登录. 我这里演示使用的是聚合数据的短信接口(并非广告),因为聚合数据的接口调用比较方便和简单,所以首先得先去聚合数据里申请一个短信接口API: 申请时会需要你进行实名认证,如果你不想认证的话跳过认证也是可以的. 申请完短信API进入以下界面后点击"模板": 需要先申请一个短信模板,根据自己的需求定义这个模板内容(定义前先阅读此页面下

JavaMail 实现发送验证码,带验证码模板的

1 package util; 2 import java.io.File; 3 import java.io.FileOutputStream; 4 import java.util.Properties; 5 import javax.activation.DataHandler; 6 import javax.activation.FileDataSource; 7 import javax.mail.Message; 8 import javax.mail.Session; 9 impo

“邮箱”“验证码”“手机号码”输入框测试用例

一:邮箱输入框 1:不输入任何字符 2:输入中文空格 3:输入英文空格 4:字符串中没有@和点  例如:huiyanni163com 5:字符串中有@没有点  例如:[email protected] 6:字符串中没有@有点 7:字符串中特殊字符   例如:[email protected] 8:@和点都存在 9:第一个字符串味@    例如:@163.com 10:@和点之间没有字符串  例如:[email protected] 11:字符串之后以为是点  例如:[email protecte

javamail模拟邮箱功能发送电子邮件-基础篇(java电子邮件实例)

引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html JavaMail  API中包含了多种邮件传输协议: SMTP   POP(最新为pop3)  IMAP  MIME 四大类  (本章主要讲解常用的 SMTP) 该API的几大核心类:会话(session).消息(message).地址(address).验证程序(Au

发送邮箱验证码

SendEMail.mail(mail, code); 第一个类:主要是设置邮箱 public class SendEMail { /**  * @param args  */ public static int mail(String mail,String Code) {  // 这个类主要是设置邮件  MailSenderInfo mailInfo = new MailSenderInfo();  mailInfo.setMailServerHost("smtp.163.com"