1. 程式人生 > >Python-傳送郵件驗證碼

Python-傳送郵件驗證碼

## 前言 ​ 關於 Python 這個欄目,咕了幾個月了,今天講講如何傳送驗證碼並驗證。 ​ 因為部分原因,寫這篇文章的時候心情是不太好的,播放首歌吧。 *** ## 程式碼 ### 匯入 - 匯入`yagmail`,`random`和`time`庫 ```python import yagmail,random,time #匯入 yagmail , random 和 time 庫 ``` ### 詢問使用者資訊 - 詢問使用者`暱稱`與`郵箱` , 並設定驗證碼 ```python ss = input("您的暱稱:")#詢問使用者暱稱 yonghu = input("您的郵箱:")#詢問使用者郵箱 key = random.randint(0,999999)#設定驗證碼 ``` ### 連結郵箱伺服器 - 連結郵箱SMTP伺服器發信 ```python yag = yagmail.SMTP( user="**郵箱賬號**", password="**郵箱密碼或授權碼**", host='**郵箱SMTP伺服器**')#連結郵箱伺服器發信 ``` - 後續可能會出教程獲取授權碼,QQ郵箱的伺服器是:smtp.qq.com;騰訊企業郵箱的伺服器是:smtp.exmail.qq.com; ### 設定郵件主題 - 設定郵件傳送時的主題 ```python subject = [" JunJun.Tec 驗證碼"] ``` ### 設定郵件內容 - 設定郵件傳送時的內容 - 以下提供郵件`HTML`程式碼參考 ,也可不帶格式。 ```html
{},您好! 
您的 JunJun.Tec 驗證碼/臨時登入密碼 為 
{}
如非您本人操作無需理會。 
感謝支援。
``` - 註明,程式碼內的 {} 無需修改,稍後需要嵌入驗證碼。如果自行編寫,需要 {} 從而加入驗證碼。 以下提供`Python`程式碼 ```python contents = ['''
{},您好! 
您的 JunJun.Tec 驗證碼/臨時登入密碼 為 
{}

如非您本人操作無需理會。 
感謝支援。
'''.format(ss,key)]#使用 ''' 嵌入HTML程式碼,使用 format 嵌入稱呼(ss)與驗證碼(key) ``` 使用 `'''` 嵌入`HTML`程式碼,使用 `format` 嵌入`稱呼(ss)`與`驗證碼(key)` ### 傳送郵件 - 使用`Yagmail`向用戶發信 ```python yag.send(yonghu,subject, contents)#傳送郵件 print("驗證碼郵件傳送成功") ``` ### 詢問使用者驗證碼 - 使用`input`向用戶詢問驗證碼 ```python keypass2 = input("輸入您的驗證碼:")#詢問使用者驗證碼 ``` - 如果你直接拿`使用者提交的變數(keypass2)`與`驗證碼變數(key)`進行比較,你就會發現`bug`,原因是兩者格式不同,所以我們要對`使用者提交的變數(keypass2)`進行處理 ### 處理使用者的驗證碼 - 對驗證碼進行處理 ```python  keypass = int(keypass2)#對 keypass2 進行 int 處理 ``` - 比對驗證碼 ```python if keypass == key: print('correct!')# 正確 else: print("Error!")# 錯誤 ``` ### 仍需改進的地方 - 還有許多內容沒做,其中包括`輸入錯誤驗證碼後等待再發送`,`防止多次請求`等等。 *** ## 完整程式碼 ```python 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 = ['''
{},您好! 
您的 JunJun.Tec 驗證碼/臨時登入密碼 為 
{}
如非您本人操作無需理會。 
感謝支援。
'''.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!")# 錯誤 ``` *** ## 演示 ![郵件](https://ae01.alicdn.com/kf/He2f63472cca14c849c108d63e91521d5q.jpg) ![演示效果](https://ae01.alicdn.com/kf/Hcc7e612e7b3d484786e6400c10a7aee9j.jpg) *** ## 寫在最後 `Python`還是挺有意思的,但是想讓本`Python`程式碼打包為小白操作的軟體,還需要進行優化,編寫GUI,那我們下期再見!
[本文釋出在部落格園,連結:https://www.cnblogs.com/jonyam/p/python-sand-email.html](https://www.cnblogs.com/jonyam/p/python-sand-email.html) [本文釋出在JunJun's Blog,連結:http://blog.itscn.top/index.php/2020/07/13](http://blog.itscn.top/index.php/202