前言

​ 关于 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

Python-发送邮件验证码的更多相关文章

  1. node.js 模拟自动发送邮件验证码

    node.js 模拟自动发送邮件验证码 引言 正文 1. QQ邮箱设置 2. 安装nodemailer 3.配置信息 4.综合 5.讲解 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号 ...

  2. python发送邮件

    python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...

  3. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  4. python 发送邮件实例

    留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例

  5. 解读Python发送邮件

    解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...

  6. python 发送邮件例子

    想到用python发送邮件 主要是服务器 有时候会产生coredump文件  ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生cored ...

  7. 利用python发送邮件

    找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...

  8. 用Python发送邮件

    文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...

  9. python识别验证码——PIL,pytesser,pytesseract的安装

    1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...

  10. ETL过程跑完后,使用python发送邮件

    目标库中,如果有行数为0的表,使用python发送邮件 # -*- coding:utf-8 -*- # Author: zjc # Description:send monitor info to ...

随机推荐

  1. Java实现 LeetCode 86 分割链表

    86. 分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1 ...

  2. 从源码研究如何不重启Springboot项目实现redis配置动态切换

    上一篇Websocket的续篇暂时还没有动手写,这篇算是插播吧.今天讲讲不重启项目动态切换redis服务. 背景 多个项目或微服务场景下,各个项目都需要配置redis数据源.但是,每当运维搞事时(修改 ...

  3. 我的Dos笔记

    DOS笔记:DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”[drive:][path][filename] 指定要列出的驱动器.目录和/或文件.    /A   ...

  4. Netty源码学习系列之4-ServerBootstrap的bind方法

    前言 今天研究ServerBootstrap的bind方法,该方法可以说是netty的重中之重.核心中的核心.前两节的NioEventLoopGroup和ServerBootstrap的初始化就是为b ...

  5. 深入浅出-iOS Block原理和内存中位置

    Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 #简介 今天回顾一下blcok,基本 ...

  6. Springboot 的单元测试

    1 测试基础类 @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment. ...

  7. Python绘图之Turtle库详解(1)

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  8. ESP8266局域网智能家居 路由器下作服务器模式串口透传 无线通信控制 arduino uno示例 模板参考

    准备工作 下载一个Arduino IDE, 下载8266的库文件 ESP8266服务器模式串口透传编译 功能说明 1.直接使用路由器中转数据 2.手机放热点模式直接传输数据 两者有访问IP地址的差别, ...

  9. CAS(乐观锁)与ABA问题

    cas是什么 CAS 全称 compare and swap 或者compare and exchange  比较并且交换.用于在没有锁的情况下,多个线程对同一个值的更新. cas原理 例如,我们对一 ...

  10. PDO的事务处理 事务回滚

    <?phpheader('content-type:text/html;charset=utf-8');include 'PdoClass.php';$objPdo=new PdoClass() ...