SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協議,Python內建對SMTP的支援,可以傳送純文字檔案,HTML郵件以及附帶檔案。
 

一、兩個模組

Python使用SMTP傳送郵件的兩個模組:smtplib模組email模組
smtplib:負責傳送郵件
email:負責構建郵件
 

二、SMTP埠

1)未加密埠,smtplib.SMTP介面,埠:25
2)使用SSL加密,smtplib.SMTP_SSL介面,埠:465
3)使用TLS加密,埠:587
 

三、四大步驟

1、構造郵件內容
 
# 純文字
msg = MIMEText(content) # 附件
msg = MIMEMultipart()
2、連線郵件伺服器
 
s = smtplib.SMTP("smtp.qq.com", 25)
3、登陸郵件伺服器
 
s.login(msg_from, passwd) 

msg_from:指傳送者的郵箱

passwd:指傳送者的密碼,這個密碼不是你的QQ登陸密碼,而是你在QQ郵箱設定開啟SMTP之後的一個授權碼
 

4、傳送郵件
 
s.sendmail(msg_from, msg_to, msg.as_string())

msg_from:傳送方
msg_to:收件方
msg.as_string():要傳送的訊息
 

四、常用場景

1、純文字郵件
 
import smtplib
from email.mime.text import MIMEText
from email.header import Header # 傳送者
msg_from = "[email protected]" # 這裡的密碼不是QQ郵箱的密碼,而是在設定裡開啟SMTP伺服器後的授權碼
passwd = "xxxxx" # 接受者
msg_to = "[email protected]" # 郵件文字
content = 'Python 郵件傳送測試...' # 郵件主題
subject = "test" # 生成一個MIMEText物件(還有一些其它引數)
msg = MIMEText(content) # 放入郵件主題
msg['Subject'] = Header(subject, 'utf-8') # 放入發件人
msg['From'] = msg_from try:
# 連線郵件伺服器
s = smtplib.SMTP("smtp.qq.com", 25) # 登入到郵箱
s.login(msg_from, passwd) # 傳送郵件:傳送方,收件方,要傳送的訊息
s.sendmail(msg_from, msg_to, msg.as_string())
print('成功')
except s.SMTPException as e:
print(e)
finally:
s.quit()
2、傳送html文字
 
import smtplib
from email.mime.text import MIMEText
from email.header import Header # 傳送者
msg_from = "[email protected]" # 這裡的密碼不是QQ郵箱的密碼,而是在設定裡開啟SMTP伺服器後的授權碼
passwd = "xxxx" # 接受者
msg_to = "[email protected]" # 郵件文字
content = """
<p>Python 郵件傳送測試...</p>
<p><a href="http://www.baidu.com">這是一個連結</a></p>
""" # 郵件主題
subject = "test" # 生成一個MIMEText物件(
msg = MIMEText(content, 'html', 'utf-8') # 放入郵件主題
msg['Subject'] = Header(subject, 'utf-8') # 放入發件人
msg['From'] = msg_from try:
# 連線郵件伺服器
s = smtplib.SMTP("smtp.qq.com", 25) # 登入到郵箱
s.login(msg_from, passwd) # 傳送郵件:傳送方,收件方,要傳送的訊息
s.sendmail(msg_from, msg_to, msg.as_string())
print('成功')
except s.SMTPException as e:
print(e)
finally:
s.quit()
3、傳送附件
 
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header # 傳送者
msg_from = "[email protected]" # 這裡的密碼不是QQ郵箱的密碼,而是在設定裡開啟SMTP伺服器後的授權碼
passwd = "xxxx" # 接受者
msg_to = "[email protected]" # 郵件主題
subject = "test" # 生成一個MIMEMultipart物件(
msg = message = MIMEMultipart() # 郵件文字
message.attach(MIMEText('這是菜鳥教程Python 郵件傳送測試……', 'plain', 'utf-8')) # 放入郵件主題
msg['Subject'] = Header(subject, 'utf-8') # 放入發件人
msg['From'] = msg_from # 新增附件
att1 = MIMEText(open('./wordcloud_singer.py', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
msg.attach(att1) try:
# 連線郵件伺服器
s = smtplib.SMTP("smtp.qq.com", 25) # 登入到郵箱
s.login(msg_from, passwd) # 傳送郵件:傳送方,收件方,要傳送的訊息
s.sendmail(msg_from, msg_to, msg.as_string())
print('成功')
except s.SMTPException as e:
print(e)
finally:
s.quit()

五、寫在最後

李先生(Lemon),高階運維工程師(自稱),SRE專家(目標),夢想在35歲買一輛保時捷。喜歡鑽研底層技術,認為底層基礎才是王道。一切新技術都離不開作業系統(CPU、記憶體、磁碟)、網路等。堅持輸入輸出,記錄自己學習的點滴,在平凡中堅持前行,總有一天會遇見不一樣的自己。公眾號:運維汪(ID:Leeeee_Li)。