您好,登錄后才能下訂單哦!
SMTP(Simple Mail Transfer Protocol)
即簡單郵件傳輸協議,是一個相對簡單的基于文本的協議, 在其之上指定了一條消息的一個或多個接收者(在大多數情況下被確認是存在的),然后消息文本會被傳輸。可以很簡單地通過telnet程序來測試一個SMTP服務器。SMTP使用TCP端口25。要為一個給定的域名決定一個SMTP服務器,需要使用MX (Mail eXchange) DNS;
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端口,它需要一個元組(主機,端口);
在使用SMTP協議發送郵件之前需要先查看發件人的郵箱是否開啟SMTP協議,如qq郵箱的開啟協議的方式是:找到郵箱的設置—>在設置頁面中選擇賬戶設置—>選擇開啟服務中的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)
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=3823903948
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。