Python批量傳送郵件
阿新 • • 發佈:2019-07-15
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)
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('郵箱地址','郵箱授權碼')
-
登入之後再使用
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)