發送 HTML 格式郵件和帶附件的郵件
上節課我們說到針對不同場景發送郵件也有不同的類型,我們可以大致劃分為:
- 普通文本郵件;
- HTML 格式郵件;
- 帶附件的郵件。
我們已經學習了如何使用 smtplib 和 email 模塊發送普通文本郵件,這節課我們來學習下如何發送 HTML 格式郵件和為郵件添加附件。
1. HTML 格式郵件介紹
所謂 HTML 格式的郵件,是指一類像網頁一樣的郵件,它包含有 HTML(超文本)鏈接,單擊鏈接可以轉到其他頁面,可以有圖片,聲音等。對比普通的文本郵件,HTML 格式的郵件,可以使得郵件內容多姿多彩,除文字外,還能有聲音圖像鏈接等等。
通常在宣傳活動、電商類等內容上使用 HTML 格式郵件的情況較多,目的是為了更好的展示郵件內容,以及和用戶有所交互。
2. 發送 HTML 格式郵件
發送郵件如下代碼所示:
import smtplib
from email.mime.text import MIMEText
host_server = 'smtp.qq.com' # 主機地址
# 發件人郵箱
sender = "[email protected]"
# 發件人郵箱密碼、授權碼
code = "xlogucqphohxcabi"
# 收件人
user = "[email protected]"
# 準備郵件數據
# 郵件標題
mail_title = "第二封郵件"
# 內容
mail_content = """
<p>HTML格式郵件內容</p>
<hr/>
<p><a >百度一下</a></p>
<ul>
<li>top1</li>
<li>top2</li>
</ul>
"""
# SMTP
smtp = smtplib.SMTP(host_server)
# 登錄
smtp.login(sender, code)
# 發送
msg = MIMEText(mail_content, 'html', 'utf-8')
msg['Subject'] = mail_title
msg['From'] = sender
msg['To'] = user
smtp.sendmail(sender, user, msg.as_string())
代碼解釋:在上一小發送普通郵件代碼的基礎上,將發送內容由普通文本變更為 HTML 格式內容,首先修改 mail_content 設置為 HTML 內容,修改 MIMEText 構建參數為 html,其他內容不變。執行完成后,打開收件郵件即可收到第二封郵件,如下圖所示。
3. 帶附件郵件介紹
電子郵件附件是跟電子郵件一同發出的附帶文件,附件包括聲音、視頻、文檔、圖片等一系列允許發送的文件(注意.exe 文件不允許發送)。帶附件的郵件具體附件位置如下圖所示。
4. 發送帶附件的郵件
發送郵件如下代碼所示:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
host_server = 'smtp.qq.com' # 主機地址
# 發件人郵箱
sender = "[email protected]"
# 發件人郵箱授權碼
code = "xlogucqphohxcabi"
# 收件人
user = "[email protected]"
# 準備郵件數據
# 郵件標題
mail_title = "第三封郵件"
# 郵件內容
mail_content = "具體請查看附件!"
# SMTP
smtp = smtplib.SMTP(host_server)
# 登錄
smtp.login(sender, code)
#構建附件
attachment=MIMEApplication(open('newinfo.xlsx','rb').read())
#為附件添加一個標題
attachment.add_header('Content-Disposition','attachment',filename='data.xlsx')
msg=MIMEMultipart()#構建帶附件的實例
#郵件標題
msg['Subject'] = mail_title
#發件人
msg['From'] = sender
#收件人
msg['To'] = user
# 發送
smtp.sendmail(sender, user, msg.as_string())
代碼解釋:在發送普通郵件的代碼的基礎上,導入 email 模塊下 MIMEMultipart 與 MIMEApplication 用于構建附件。首先通過 MIMEApplication 封裝附件,newinfo.xlsx 為本地文件名稱, data.xlsx 為發送到對方郵箱后所顯示的名稱。通過 MIMEMultipart 構建帶附件的實例,其他內容不變。執行完成后,打開收件郵件即可收到第三封郵件,如下圖所示。
5. 小結
本節課程我們主要學習了使用 smtplib 與 email 模塊實現帶附件的郵件發送。本節課程的重點如下:
- 了解 HTML 格式郵件的概念和作用;
- 掌握 HTML 格式郵件的發送;
- 了解帶附件的郵件概念和作用;
- 掌握帶附件的郵件的發送。