【开服必备】用Python优雅的生成用户验证码

最近我一个好哥们儿在研究开自己的私服,但是他本人不怎么用Python,所以趁着早上我没事儿给我发微信问我这个事儿该怎么办。

想了一想我也没犹豫,爽快的答应他写一个生成随机码的脚本。那么,现在来看看我是怎么写的吧!

准备环境

Python3和以下包

smtplib

email

random

rich

datetime

其实这里要说明下,我们这里仅仅是模拟发送单个对象的邮件,如果要针对实时在线生成的用户请求,你可能还需要requests来获取,用户从前端发来的请求,后文会提到。

好的,现在Python准备好了就可以愉快的写代码了吗?并没有!

因为从我们要用到的包中,你也可以看到我们要用到SMTP服务器来进行中介服务进行发送。

那么,什么是SMTP呢?

准确的说,它是一种基于FTP文件传输服务上的一种邮件服务,且容易搭建,这也是为什么我们可以通过Python来轻松的实现验证码发送的流程。

好的,理论的东西都讲完了,该弄点实际的东西了!

首先,我们先将我们要用的库进行导入

import smtplib
from email.mime.text import MIMEText
from random import randint
from rich import console, style
from datetime import date, datetime
from rich.console import Console

引入了所有的包后,我们用rich.console.Console()方法创建一个用于在终端打印状态的实例

console = Console()

写一个函数key_gen()用于生成我们的验证码:RANDOM_AUTHORITY_KEYS

#生成验证密钥
def key_gen():
    code_list = []
    for i in range(2):
        num = randint(0,9)
        char_a = randint(65,90)
        char_b = randint(97,122)
        code = str(num) + str(chr(char_a)) + str(chr(char_b))
        code_list.append(code)
    RANDOM_AUTHORITY_KEYS = code_list[0] + code_list[1]
    return RANDOM_AUTHORITY_KEYS

存储一下你用于登录SMTP服务器的账号和密码,切记!这个密码不是你登陆QQ/网易邮箱的登陆密码,而是你邮箱设置下的第三方登录终端的授权码!

ACCOUNT = " "
PASSWORD = " "

因为我们要以文档的形式进行邮件的发送,这也就是为什么之前我们从email库下引入了其下面的mime.text.MIMETEXT()方法。当然,这取决于你的邮件类型,你也可以通过

from email.mime.multipart import MIMEMultipart

使得你的代发能发送图文并茂的邮件。

那么现在我们来创建我们的HTML文档模板

HTML = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>测试</title>
</head>
<body>
    <h1>这是一条测试</h1>
    <p>您的验证码为:{}</p>
</body>
</html>
""".format(key_gen())

可以看到,我们用format()方法为p标签内填充了我们之前用key_gen()函数生成的随机验证码

生成好了验证码,我们应该进行发送了,写一个send_email()函数来实现邮件的发送。

def send_email():
    msg = MIMEText(HTML,"html")

    msg['to'] = " "
    msg['from'] = ACCOUNT
    msg["subject"] = " "

    try:
        #创建SMTP实例
        server = smtplib.SMTP()
        #连接至SMTP服务器
        server.connect("smtp.qq.com")
        #登录SMTP服务器
        server.login(ACCOUNT,PASSWORD)
        #发送邮件,参数顺寻:发送者,收件人,将HTML转为字符串发送
        #之所以对msg['to']进行分列,是考虑到实际上线时,如果作为推广邮件可能存在
        群发,因此可能需要结合对数据库获取和循环相结合实现群发。
        server.sendmail(msg["from"],msg["to"].split(','),msg.as_string())
        #退出SMTP服务器
        server.quit()
        console.print("[{}] [INFO] Send Sucess".format(datetime.now()),style="bold green")
    except Exception as Error:
        console.print("[{}] [ERROR] Send Failed".format(datetime.now()),style="bold red")
if __name__ == "__main__":
    send_email()

运行一下我们可以看到:下方的输出日志显示发送成功(Send Success),并且QQ也提示我们收到了新的邮件:

打开邮件后的内容和我们之前写的HTML体中的内容保持一致:

写在最后

当然,验证码的体系也并非这么简单,首先你需要从前端读取到用户的名称以存储到msg['to']下面以保证邮件的送达,并且在发送的同时,前端也需要监听验证码的值,以保证前后端验证码值的统一性。

好的,以上就是本期Python验证码分享的全部内容了,喜欢的不妨一键三连支持一下作者。

我是Deahost,我们下期分享再见!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Day(AKA Elin)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值