邮箱图片验证码

1 篇文章 0 订阅
1 篇文章 0 订阅

展示

在这里插入图片描述

依赖

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
 </dependency>

yml配置

spring:
    mail:
      host: smtp.qq.com
      username: 1034682998@qq.com(本人QQ邮箱地址)
      password: 开通smtp服务所生成的授权码

邮件实现类

/**
*@param mail: 接收者邮箱
*
**/
 @Autowired
    private JavaMailSender mailSender; //Bean注入
 @Value("${spring.mail.username}")
    private String sender; //读取配置文件中的发送者邮箱
 @Override
    public Result mail(String mail, HttpServletRequest request) {

        MimeMessage QEmail = null;
        try {
            int width = 200;
            int height = 69;
            QEmail = mailSender.createMimeMessage();
            MimeMessageHelper QEmail_Info = new MimeMessageHelper(QEmail, true);
            //发送者邮箱,即为开通了smtp服务的邮箱
            QEmail_Info.setFrom(sender);
            //发送到的邮箱
            QEmail_Info.setTo(mail);
            //发送主题
            QEmail_Info.setSubject("用户注册");
            //发送内容
            QEmail_Info.setText("注册验证码为");
            QEmail_Info.setText("<html><body>请输入图片中的验证码<hr>图片:<img src='cid:emailCode' style = 
            'width:600px;height:300px;border:1px solid #000;'/></body></html>", true);
            //获取图片验证码
            //生成对应宽高的初始图片
            BufferedImage verifyImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
            //功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符
            String randomText = VerifyCode.drawRandomText(width, height, verifyImg);        
            //验证码字符加入到Session中
            request.getSession().setAttribute("emailCode", randomText);
            //输出Resource流
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            ImageIO.write(verifyImg, "png", os);    //指定必须为png
            ByteArrayResource byteArrayResource = new ByteArrayResource(os.toByteArray());
            //邮件图片
            //必须强制类型转换且contentType为image/png
            QEmail_Info.addInline("emailCode", (InputStreamSource) byteArrayResource, "image/png");             
            //附件图片
            //QEmail_Info.addAttachment("attachement.png", byteArrayResource);
        } catch (Exception e) {
            return "失败";
        }
        mailSender.send(QEmail);
        return "成功");
    }

验证码工具类

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

public class VerifyCode {

    public static String drawRandomText(int width, int height, BufferedImage verifyImg) {
        Graphics2D graphics = (Graphics2D) verifyImg.getGraphics();
        graphics.setColor(Color.WHITE);//设置画笔颜色-验证码背景色
        graphics.fillRect(0, 0, width, height);//填充背景
        graphics.setFont(new Font("微软雅黑", Font.BOLD, 40));
        //数字和字母的组合

        StringBuffer sBuffer = new StringBuffer();
        int x = 10;  //旋转原点的 x 坐标
        String ch = "";
        Random random = new Random();
        for (int i = 0; i < 4; i++) {
            graphics.setColor(getRandomColor());
            //设置字体旋转角度
            int degree = random.nextInt() % 30;  //角度小于30度
            ch = getText();
            sBuffer.append(ch);
            //正向旋转
            graphics.rotate(degree * Math.PI / 180, x, 45);
            graphics.drawString(ch, x, 45);
            //反向旋转
            graphics.rotate(-degree * Math.PI / 180, x, 45);
            x += 48;
        }
        //画干扰线
        for (int i = 0; i < 6; i++) {
            // 设置随机颜色
            graphics.setColor(getRandomColor());
            // 随机画线
            graphics.drawLine(random.nextInt(width), random.nextInt(height),
                    random.nextInt(width), random.nextInt(height));
        }
        //添加噪点
        for (int i = 0; i < 30; i++) {
            int x1 = random.nextInt(width);
            int y1 = random.nextInt(height);
            graphics.setColor(getRandomColor());
            graphics.fillRect(x1, y1, 2, 2);
        }
        return sBuffer.toString();
    }

    /**
     * 随机取色
     */
    private static Color getRandomColor() {
        Random ran = new Random();
        Color color = new Color(ran.nextInt(256),
                ran.nextInt(256), ran.nextInt(256));
        return color;
    }
    /**
     * 随机字符
     */
    private static String getText() {
        Random random = new Random();
        String baseNumLetter = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
        int dot = random.nextInt(baseNumLetter.length());
        String ch = baseNumLetter.charAt(dot) + "";
        return ch;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
测试短信验证码和图片验证码的测试用例可以分为以下几个方面: 1. 验证码生成:测试验证码生成的准确性和随机性,确保生成的验证码符合预期要求。 - 测试生成的验证码长度是否正确。 - 测试生成的验证码是否包含正确的字符集。 - 测试生成的验证码是否具有一定的随机性,即多次生成验证码是否存在重复。 2. 验证码发送:测试验证码发送的可靠性和及时性,确保验证码能够正确发送到用户手机或邮箱。 - 测试验证码发送接口是否正常工作。 - 测试验证码发送的响应时间是否符合要求。 - 测试验证码发送的稳定性,即多次发送验证码是否存在失败情况。 3. 验证码校验:测试验证码校验的准确性和安全性,确保用户输入的验证码能够正确验证。 - 测试验证码校验接口是否正常工作。 - 测试输入正确的验证码是否能够通过验证。 - 测试输入错误的验证码是否能够被拒绝。 4. 验证码过期:测试验证码过期时间的设置和过期后的处理,确保验证码在有效期内使用。 - 测试验证码的有效期是否设置正确。 - 测试过期时间到达后,验证码是否被正确标记为无效。 - 测试过期时间到达后,用户是否无法使用已过期的验证码进行验证。 5. 异常情况处理:测试在异常情况下的验证码处理,确保系统能够正确处理异常情况。 - 测试当验证码生成失败时,系统是否能够正确处理。 - 测试当验证码发送失败时,系统是否能够正确处理。 - 测试当验证码校验接口异常时,系统是否能够正确处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值