一行代码发送邮件、生成二维码、验证码!2022-01-13

哈喽,大家好!我是指北君!

这是一篇可以使用一行代码发送邮件、生成二维码、生成验证码的速食指南,炒鸡简单。为大家介绍一下Hutool Java工具类库。

1. Hutool是什么

下面是官方的介绍:

Hutool是一个Java工具包类库,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类。

官网如下:https://www.hutool.cn/

个人觉得Hutool是一个比较好用的工具类了,方法比较多,也比较全。

下面我们看三个例子,二维码生成、验证码生成、邮件发送。

2. 二维码生成

首先需要引入hutool依赖,以及使用比较广泛的二维码工具类zxing。如下:

1
2
3
4
5
6
7
8
9
10
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.18</version>
</dependency>
<dependency>    
    <groupId>com.google.zxing</groupId>    
    <artifactId>core</artifactId>    
    <version>3.3.3</version> 
</dependency>

2.1 一行代码生成二维码

1
QrCodeUtil.generate("http://www.itmind.net/",500,500, FileUtil.file("QRCODE1.jpg"));

下图为生成的二维码,微信,知乎扫一扫更多惊喜哦!

QRCODE1

是不是很Easy,Hutool对zxing做了封装,开箱即食。

2.2 自定义背景以及带有图标的二维码。

先看代码

1
2
3
4
QrConfig config = new QrConfig(500, 500);
config.setImg("java-coffe.png");
config.setErrorCorrection(ErrorCorrectionLevel.Q);
QrCodeUtil.generate("https://www.24kdh.com/",config, FileUtil.file("QRCODE2.jpg"));

下图为生成的二维码带有图标,而且纠错级别也比上面高,就是遮挡一定的比例仍旧能够识别。但是从远处扫码的识别度却不如上面的二维码。 同样扫一扫有惊喜。推荐使用微信以外的客户端扫码。

QRCODE2

2.4 二维码识别

同样是一行代码搞定:

1
2
String decode = QrCodeUtil.decode(FileUtil.file("QRCODE1.jpg"));
Console.log("decodeStr",decode);

3. 验证码生成

3.1 一行代码生成验证码

上代码, 参数分别是宽、高、验证码个数,横线干扰个数。

1
CaptchaUtil.createLineCaptcha(300, 100,6,100).write("lineCaptcha1.png");

下图为生成的二维码图片,同时也可以获取到生成的验证码,然后进行验证,

lineCaptcha1

3.2 自定义验证码生成规则

下面代码生成一个6位数字的二维码

1
2
3
4
5
6
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(300, 100,6,100);
RandomGenerator randomGenerator = new RandomGenerator("0123456789", 6);
lineCaptcha.setGenerator(randomGenerator);
String lineCaptchaCode = lineCaptcha.getCode();
Console.log("lineCaptchaCode",lineCaptchaCode);
lineCaptcha.write("lineCaptcha.png");

数字验证码图片如下:

;

3.3 GIF我最闪亮验证码

1
2
3
4
GifCaptcha gifCaptcha = CaptchaUtil.createGifCaptcha(500, 200, 8);
gifCaptcha.write("gifCaptcha.gif");
String gifCaptchaCode = gifCaptcha.getCode();
Console.log("gifCaptchaCode", gifCaptchaCode);

还可以生成如下GIF验证码图片:

gifCaptcha

3.4 扭曲防蓝光验证码

1
2
ShearCaptcha shearCaptcha = CaptchaUtil.createShearCaptcha(500, 200, 6, 20);
shearCaptcha.write("shearCaptcha.png");

还可以生成一个更加扭曲的验证码图片,据说可以防止近视!

shearCaptcha

4. 邮件发送

邮件需要引入额外的依赖:

1
2
3
4
5
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

4.1 一行代码发邮件

在此之前需要简单的配置一下邮件服务,也可以使用代码构建。

maven项目的目录src/main/resources下新建mail.setting文件,内容配置如下。

1
2
3
4
5
6
7
8
9
10
# 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
host = smtp.yeah.net
# 邮件服务器的SMTP端口,可选,默认25
port = 25
# 发件人(必须正确,否则发送失败)
from = javaNorth@yeah.net
# 用户名,默认为发件人邮箱前缀
user = javaNorth
# 密码(注意,某些邮箱需要为SMTP服务单独设置授权码,这里是开启了网易的SMTP服务)
pass = XXXXXXXXXXXXX

一行代码发送邮件给指定的邮箱,参数分别为邮箱地址,主题,内容,是否为HTML内容。

1
MailUtil.send("liuyuanjiang109@126.com","JavaNorth Mail Test","This Mail from java North",false);

邮件内容如下:

image-20220104223434149

4.2 群发邮件,html文本,并且包含多个附件

我们也可以使用代码构建邮件服务参数。并且可以群发邮件,发送html文本,以及多个附件。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        MailAccount account = new MailAccount();
        account.setHost("smtp.yeah.net");
        account.setPort(25);
        account.setAuth(true);
        account.setFrom("javaNorth@yeah.net");
        account.setUser("javaNorth");
        account.setPass("DJQ********");

        ArrayList<String> mailList = CollUtil.newArrayList(
                "liu********9@outlook.com",
                "liu********@126.com");
        MailUtil.send( account, mailList,"JavaNorth Mail Test",
                "<h1>JavaNorth Html Mail Test</h1>",true, 
                FileUtil.file("testOpenLeagueoflegends1.pdf"),
                FileUtil.file("gifCaptcha.gif"));

收到邮件如下所示:

image-20220104224543607

邮件发送同时也可以使用SSL加密方式发送,此处也就不再举例子了。感兴趣的话随时来交流群海皮哈!

不同的邮箱可能配置略有不同,如果遇到问题,欢迎随时来海皮!

老规矩,示例代码已上Github,并且提供邮箱练习使用:https://github.com/javatechnorth/java-study-note/tree/master/javaOpenSource/src/main/java/hutool

总结

Hutool还有很多功能,使用比较爽,大家随机食用即可。再次感谢开发者的贡献!

Java Geek Tech wechat
欢迎订阅 Java 技术指北,这里分享关于 Java 的一切。