Python-发送邮件验证码

前言

​ 未经授权,禁止转载。转载联系邮箱i@r3r.top

​ 关于 Python 这个栏目,咕了几个月了,今天讲讲如何发送验证码并验证。

​ 因为部分原因,写这篇文章的时候心情是不太好的,播放首歌吧。


代码

导入

  • 导入yagmail,randomtime
import yagmail,random,time #导入 yagmail , random 和 time 库

询问用户信息

  • 询问用户昵称邮箱 , 并设置验证码
ss = input("您的昵称:")#询问用户昵称
yonghu = input("您的邮箱:")#询问用户邮箱
key = random.randint(0,999999)#设置验证码

链接邮箱服务器

  • 链接邮箱SMTP服务器发信
yag = yagmail.SMTP( user="**邮箱账号**", password="**邮箱密码或授权码**", host='**邮箱SMTP服务器**')#链接邮箱服务器发信
  • 后续可能会出教程获取授权码,QQ邮箱的服务器是:smtp.qq.com;腾讯企业邮箱的服务器是:smtp.exmail.qq.com;

设置邮件主题

  • 设置邮件发送时的主题
subject = [" JunJun.Tec 验证码"]

设置邮件内容

  • 设置邮件发送时的内容
  • 以下提供邮件HTML代码参考 ,也可不带格式。
<table style="width: 99.8%; height: 95%;">
    <tbody>
        <tr>
            <td id="QQMAILSTATIONERY" style="background:url(https://rescdn.qqmail.com/bizmail/zh_CN/htmledition/images/xinzhi/bg/a_02.jpg) no-repeat #fffaf6; min-height:550px; padding:100px 55px 200px 100px; ">
            <div style="text-align: center;"><font>{},您好!&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>您的 JunJun.Tec 验证码/临时登录密码 为&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font color="#ff0000"><b><u>{}</u></b></font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>如非您本人操作无需理会。&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>感谢支持。</font></div>
            </td>
        </tr>
    </tbody>
</table>
<div><includetail><!--<![endif]--></includetail></div>
  • 注明,代码内的 {} 无需修改,稍后需要嵌入验证码。如果自行编写,需要 {} 从而加入验证码。

以下提供Python代码

contents = ['''
<table style="width: 99.8%; height: 95%;">
    <tbody>
        <tr>
            <td id="QQMAILSTATIONERY" style="background:url(https://rescdn.qqmail.com/bizmail/zh_CN/htmledition/images/xinzhi/bg/a_02.jpg) no-repeat #fffaf6; min-height:550px; padding:100px 55px 200px 100px; ">
            <div style="text-align: center;"><font>{},您好!&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>您的 JunJun.Tec 验证码/临时登录密码 为&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font color="#ff0000"><b><u>{}</u></b></font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>如非您本人操作无需理会。&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>感谢支持。</font></div>
            </td>
        </tr>
    </tbody>
</table>
<div><includetail><!--<![endif]--></includetail></div>
'''.format(ss,key)]#使用 ''' 嵌入HTML代码,使用 format 嵌入称呼(ss)与验证码(key)

使用 ''' 嵌入HTML代码,使用 format 嵌入称呼(ss)验证码(key)

发送邮件

  • 使用Yagmail向用户发信
yag.send(yonghu,subject, contents)#发送邮件
print("验证码邮件发送成功")

询问用户验证码

  • 使用input向用户询问验证码
keypass2 = input("输入您的验证码:")#询问用户验证码
  • 如果你直接拿用户提交的变量(keypass2)验证码变量(key)进行比较,你就会发现bug,原因是两者格式不同,所以我们要对用户提交的变量(keypass2)进行处理

处理用户的验证码

  • 对验证码进行处理
keypass = int(keypass2)#对 keypass2 进行 int 处理
  • 比对验证码
if keypass == key:
    print('correct!')# 正确
else:
    print("Error!")# 错误

仍需改进的地方

  • 还有许多内容没做,其中包括输入错误验证码后等待再发送防止多次请求等等。

完整代码

import yagmail,random,time #导入 yagmail , random 和 time 库
ss = input("您的昵称:")#询问用户昵称
yonghu = input("您的邮箱:")#询问用户邮箱
key = random.randint(0,999999)#设置验证码
yag = yagmail.SMTP( user="**邮箱账号**", password="**邮箱密码或授权码**", host='**邮箱SMTP服务器**')#链接邮箱服务器发信
subject = [" JunJun.Tec 验证码"]
contents = ['''
<table style="width: 99.8%; height: 95%;">
    <tbody>
        <tr>
            <td id="QQMAILSTATIONERY" style="background:url(https://rescdn.qqmail.com/bizmail/zh_CN/htmledition/images/xinzhi/bg/a_02.jpg) no-repeat #fffaf6; min-height:550px; padding:100px 55px 200px 100px; ">
            <div style="text-align: center;"><font>{},您好!&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>您的 JunJun.Tec 验证码/临时登录密码 为&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font color="#ff0000"><b><u>{}</u></b></font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>如非您本人操作无需理会。&nbsp;</font></div>
            <div style="text-align: center;"><font><br>
                </font>
            </div>
            <div style="text-align: center;"><font>感谢支持。</font></div>
            </td>
        </tr>
    </tbody>
</table>
<div><includetail><!--<![endif]--></includetail></div>
'''.format(ss,key)]#使用 ''' 嵌入HTML代码,使用 format 嵌入称呼(ss)与验证码(key)
yag.send(yonghu,subject, contents)#发送邮件
print("验证码邮件发送成功")
keypass2 = input("输入您的验证码:")#询问用户验证码
keypass = int(keypass2)#对 keypass2 进行 int 处理
if keypass == key:
    print('correct!')# 正确
else:
    print("Error!")# 错误

演示

邮件

演示效果


写在最后

Python还是挺有意思的,但是想让本Python代码打包为小白操作的软件,还需要进行优化,编写GUI,那我们下期再见!


本文发布在博客园,链接:https://www.cnblogs.com/jonyam/p/python-sand-email.html

本文发布在JunJun's Blog,链接:http://blog.itscn.top/index.php/2020/07/13

posted @ 2020-07-02 18:24  Hi-World  阅读(1466)  评论(0编辑  收藏  举报