1. 程式人生 > >Python批量傳送郵件

Python批量傳送郵件

1.SMTP協議

  • SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,是一個相對簡單的基於文字的協議, 在其之上指定了一條訊息的一個或多個接收者(在大多數情況下被確認是存在的),然後訊息文字會被傳輸。可以很簡單地通過telnet程式來測試一個SMTP伺服器。SMTP使用TCP埠25。要為一個給定的域名決定一個SMTP伺服器,需要使用MX (Mail eXchange) DNS;

2.Python的smtplib庫

  • Python對SMTP支援有smtplib和email兩個模組,email負責構造郵件,smtplib負責傳送郵件;

  • smtplib.SMTP(host="",port=0,local_hostname=None,[timeout,]source_address=None)

    :SMTP類定義作為SMTP的建構函式定義了一個SMTP客戶端會話物件,功能是與smtp伺服器建立連線,在連線成功後就可以向伺服器傳送相關請求,比如登陸、校驗、傳送、退出等。引數host是遠端smtp主機地址、port是連結埠,預設25、local_hostname是將本地主機的FQDN(完整域名)傳送 HELO/EHLO(標識使用者身份)的指令、timeout為連結或嘗試連結多少秒後超時、source_address是繫結到具有多個網路介面的計算機中的某個特定源地址上或特定的TCP埠,它需要一個元組(主機,埠);

3.開啟郵箱SMTP協議

在使用SMTP協議傳送郵件之前需要先檢視發件人的郵箱是否開啟SMTP協議,如qq郵箱的開啟協議的方式是:找到郵箱的設定-->在設定頁面中選擇賬戶設定-->選擇開啟服務中的SMTP服務開啟,點選開啟後會彈出一個驗證保密視窗,驗證成功後就會自動生成授權碼,這個授權碼在傳送郵件時會用到;

4.使用SMTP傳送郵件

  • 在使用SMTP傳送郵件傳送郵件之前我們需要先匯入smtplib模組和email.mime.text模組中的MIMEText

  • 然後構造一個MIMEText訊息物件,其中第一個引數就是郵件正文、第二個引數是MIME的格式,第三個引數是編碼。將發件人、收件人、主題都傳入這個物件中;

  • 然後模擬登入伺服器,使用smtplib庫中的SMTP類建立SMTP的操作物件並連線smtp目標伺服器,可以是163、QQ等,如果是163郵箱伺服器地址是smtp.163.com,如果是qq郵箱伺服器地址是smtp.qq.com。 訪問郵箱的伺服器之後需要使用login('郵箱地址','郵箱授權碼')

    方法根據自己的賬號登入伺服器(這裡的授權碼就是之前開啟SMTP協議生成的授權碼),如果不登入是不能發郵件的;

  • 登入之後再使用send_message()方法將傳送郵件的訊息傳遞給SMTP物件,開始傳送郵件;

import smtplib
from email.mime.text import MIMEText
from const_file import passwd

def send_email(from_addr, to_addr, subject, password):
    msg = MIMEText("郵件正文",'html','utf-8')
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Subject'] = subject
    smtp_server = smtplib.SMTP('smtp.qq.com')
    smtp_server.login(from_addr, password)
    smtp_server.send_message(msg=msg)
if __name__ == "__main__":
    # passwd填寫認證密碼,不是登入密碼
    send_email("郵箱地址", "郵箱地址", "這是一封測試郵件", passwd)

5.郵件的批量傳送

import smtplib
from email.mime.text import MIMEText
from const_file import passwd

def send_email(from_addr, to_addr, subject, password):
    msg = MIMEText("郵件正文",'html','utf-8')
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Subject'] = subject
    smtp_server = smtplib.SMTP('smtp.qq.com')
    smtp_server.login(from_addr, password)
    smtp_server.send_message(msg=msg)

if __name__ == "__main__":
    send_list = ['[email protected]', '[email protected]', '[email protected]']
    for to_addr in send_list:
        send_email("郵箱地址", to_addr, "這是一封測試郵件", passwd)

參考:https://www.9xkd.com/user/plan-view.h