SMTP(Simple Mail Transfer Protocol)
即簡單郵件傳輸協議,是一個相對簡單的基於文本的協議, 在其之上指定了一條消息的一個或多個接收者(在大多數狀況下被確認是存在的),而後消息文本會被傳輸。能夠很簡單地經過telnet程序來測試一個SMTP服務器。SMTP使用TCP端口25。要爲一個給定的域名決定一個SMTP服務器,須要使用MX (Mail eXchange) DNS;Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件;html
smtplib.SMTP(host="",port=0,local_hostname=None,[timeout,]source_address=None)
:SMTP類定義做爲SMTP的構造函數定義了一個SMTP客戶端會話對象,功能是與smtp服務器創建鏈接,在鏈接成功後就能夠向服務器發送相關請求,好比登錄、校驗、發送、退出等。參數host是遠程smtp主機地址、port是連接端口,默認2五、local_hostname是將本地主機的FQDN(完整域名)發送 HELO/EHLO(標識用戶身份)的指令、timeout爲連接或嘗試連接多少秒後超時、source_address是綁定到具備多個網絡接口的計算機中的某個特定源地址上或特定的TCP端口,它須要一個元組(主機,端口);服務器
在使用SMTP協議發送郵件以前須要先查看發件人的郵箱是否開啓SMTP協議,如qq郵箱的開啓協議的方式是:找到郵箱的設置-->在設置頁面中選擇帳戶設置-->選擇開啓服務中的SMTP服務開啓,點擊開啓後會彈出一個驗證保密窗口,驗證成功後就會自動生成受權碼,這個受權碼在發送郵件時會用到;網絡
在使用SMTP發送郵件發送郵件以前咱們須要先導入smtplib
模塊和email.mime.text
模塊中的MIMEText
;函數
而後構造一個MIMEText消息對象,其中第一個參數就是郵件正文、第二個參數是MIME的格式,第三個參數是編碼。將發件人、收件人、主題都傳入這個對象中;測試
而後模擬登陸服務器,使用smtplib庫中的SMTP類建立SMTP的操做對象並鏈接smtp目標服務器,能夠是16三、QQ等,若是是163郵箱服務器地址是smtp.163.com
,若是是qq郵箱服務器地址是smtp.qq.com
。 訪問郵箱的服務器以後須要使用login('郵箱地址','郵箱受權碼')
方法根據本身的帳號登陸服務器(這裏的受權碼就是以前開啓SMTP協議生成的受權碼),若是不登陸是不能發郵件的;編碼
登陸以後再使用send_message()
方法將發送郵件的消息傳遞給SMTP對象,開始發送郵件;code
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)
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 = ['a@163.com', 'b@163.com', 'c@163.com'] for to_addr in send_list: send_email("郵箱地址", to_addr, "這是一封測試郵件", passwd)
參考:https://www.9xkd.com/user/plan-view.html?id=3823903948server