【前言】
在某些專案中,我們需要實現傳送郵件的功能,比如:
- 爬蟲結束後,傳送郵件通知
- 定時傳送郵件提醒待辦事項
- 某項業務邏輯觸發郵件通知
今天我們就分享如何基於smtp藉助163郵箱來傳送郵件
【實現過程】
163郵箱配置
首先登入163郵箱進行配置(沒有請先註冊):https://email.163.com/
配置SMTP服務開啟(需要傳送簡訊驗證碼進行開通)
開始編寫指令碼
新建 email_163.py python指令碼
新增 smtp 模組
import smtplib
from email.mime.text import MIMEText
編寫程式碼實現
from datetime import datetime
import smtplib
from email.mime.text import MIMEText
from config import settings as st
def send_mail_plain(receivers, subject, content):
#163郵箱伺服器地址
mail_host = 'smtp.163.com'
#163使用者名稱
mail_user = st.mail_user_163
#密碼(部分郵箱為授權碼)
mail_pass = st.mail_password_163
#郵件傳送方郵箱地址
sender = st.mail_sender_163
#郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個郵件地址群發
receivers = receivers
#郵件內容設定
message = MIMEText(content, 'plain', 'utf-8')
#郵件主題
message['Subject'] = subject
#傳送方資訊
message['From'] = sender
#接收方資訊
message['To'] = receivers[0]
#登入併傳送郵件
smtpObj = smtplib.SMTP()
#連線到伺服器
smtpObj.connect(mail_host, 25)
#登入到伺服器
smtpObj.login(mail_user, mail_pass)
#傳送
smtpObj.sendmail(sender, receivers, message.as_string())
#退出
smtpObj.quit()
if __name__ == '__main__':
receivers = ['xxxxx@qq.com']
subject = 'SevenTiny通知'
content = f'這是郵件主體內容!傳送時間:{datetime.now()}'
send_mail_plain(receivers, subject, content)
print('Sent successfully!')
說明:
因為我這裡用了配置檔案的方式填充賬號密碼,這樣可以避免在專案中硬編碼賬號密碼,降低洩露風險
如果需要了解配置檔案的方式,請參考:https://www.cnblogs.com/7tiny/p/16211724.html
我們需要配置如下幾個關鍵引數:
- 163使用者名稱
mail_user = "xxxxx@163.com" - 密碼(部分郵箱為授權碼)
mail_pass = "開通smtp服務時,163郵箱設定彈出的授權碼(只會彈出一次,如果忘記重新配置)" - 郵件傳送方郵箱地址
sender = "xxxxx@163.com"
然後填寫接收郵箱,主題,內容即可(這部分參考程式碼引數傳遞即可,非常簡單)
【測試】
我們執行指令碼,可以看到收到傳送成功的日誌
我們開啟163郵箱檢視已傳送郵箱,可以已傳送郵箱中有我們剛才傳送的郵件
開啟接收方qq郵箱(也可以是其他郵箱)檢視是否正確收到郵件
可以看到我們已經正確收到了剛才傳送的郵件!
【總結】
我們已經通過 python smtp 模組藉助163郵箱實現簡單的郵件傳送,如果是自建郵箱伺服器,需要自行將163郵箱伺服器地址替換成自己郵箱伺服器地址:mail_host = 'smtp.163.com'
注意:163伺服器作為傳送方,每天有50封郵件上限! 如果超出數量會傳送失敗。
【原始碼地址】
https://github.com/sevenTiny/CodeArts/blob/master/Python/Mail/email_163.py