python實現基於smtp傳送郵件

7tiny發表於2022-05-01

【前言】

在某些專案中,我們需要實現傳送郵件的功能,比如:

  1. 爬蟲結束後,傳送郵件通知
  2. 定時傳送郵件提醒待辦事項
  3. 某項業務邏輯觸發郵件通知

今天我們就分享如何基於smtp藉助163郵箱來傳送郵件

【實現過程】

163郵箱配置

首先登入163郵箱進行配置(沒有請先註冊):https://email.163.com/

配置SMTP服務開啟(需要傳送簡訊驗證碼進行開通)

image

開始編寫指令碼

新建 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"

然後填寫接收郵箱,主題,內容即可(這部分參考程式碼引數傳遞即可,非常簡單)

【測試】

我們執行指令碼,可以看到收到傳送成功的日誌

image

我們開啟163郵箱檢視已傳送郵箱,可以已傳送郵箱中有我們剛才傳送的郵件

image

開啟接收方qq郵箱(也可以是其他郵箱)檢視是否正確收到郵件

image

可以看到我們已經正確收到了剛才傳送的郵件!

【總結】

我們已經通過 python smtp 模組藉助163郵箱實現簡單的郵件傳送,如果是自建郵箱伺服器,需要自行將163郵箱伺服器地址替換成自己郵箱伺服器地址:mail_host = 'smtp.163.com'

注意:163伺服器作為傳送方,每天有50封郵件上限! 如果超出數量會傳送失敗。

【原始碼地址】

https://github.com/sevenTiny/CodeArts/blob/master/Python/Mail/email_163.py

相關文章