「關注我,和我一起放下靈魂,讓靈魂去搬磚。」
Python郵件發送
Python版本3.8.0,開發工具:Pycharm
首先需要了解python的smtplib提供了一種很方便的途徑發送電子郵件,它對smtp協議進行了簡單的封裝。
那什麼是smtp協議呢?
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。
郵件發送
Python創建 SMTP 對象
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數說明
:
- host: SMTP 服務器主機。 你可以指定主機的ip地址或者域名如:runoob.com,這個是可選參數。
- port: 如果你提供了 host 參數, 你需要指定 SMTP 服務使用的端口號,一般情況下SMTP端口號爲25。
- local_hostname: 如果SMTP在你的本機上,你只需要指定服務器地址爲 localhost 即可。
Python SMTP對象使用sendmail方法發送郵件
參數說明
:
- from_addr: 郵件發送者地址。
- to_addrs: 字符串列表,郵件發送地址。
- msg: 發送消息
實例
設置發件人信息
# 發件人郵箱
username = "[email protected]"
# QQ郵箱授權碼
password = "xxxxxxxxx"
設置收件人信息
# 可設置多個收件人郵箱
receivers = ['[email protected]', '[email protected]']
# 設置抄送人信息,可多個,逗號分隔
cc = ['[email protected]']
設置發送內容,標題+內容+附件等
# 設置標題
subject = "我是郵箱標題"
# 設置內容
content = "我是郵箱內容"
# 創建MIMEMultipart對象,並封裝相應的數據
message = MIMEMultipart()
# 封裝標題
message['Subject'] = Header(subject, 'gbk')
# 封裝發件人標識
message['From'] = "每日推送"
# 封裝收件人和抄送人
message['to'] = Header(",".join(receivers))
message['Cc'] = Header(",".join(cc))
# 生成郵件正文,可以是html
msgText = MIMEText(content, "plain", "utf-8")
# 封裝郵件正文
message.attach(msgText)
創建實例,發送郵件
# 設置smtp的相關參數
smtp_server = 'smtp.qq.com'
smtp_port = 25
smtp = smtplib.SMTP(smtp_server, smtp_port)
# 登錄
smtp.login(username, password)
# 發送郵件
smtp.sendmail(username, receivers+cc, message.as_string())
smtp.quit()
其他功能
郵件正文應用 html
# 更改content內容格式爲html
send_text = MIMEText(content, "html", "utf-8")
# 郵件正文html模板
content = """
<html>
<h1>html測試:</h1>
<p>測試1</p>
<a href="https://www.hao123.com/">hao123</a>
<br>
<a href="https://www.baidu.com/?tn=sitehao123">baidu</a>
<br>
<p><img src="cid:image" alt="圖片" width="100" height="100"></a></p>
<br>
<a href="#">圖片介紹</a>
</html>
"""
郵件正文中添加圖片
# 讀取文件並創建MIMEImage
fp = open(file_path, 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定義圖片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image>')
message.attach(msgImage)
郵件正文中添加附件
# 讀取csv文件作爲附件
send_file_path = "xxxxxx"
# 發送附件
addfile = MIMEText(open(send_file_path, 'rb').read(), 'base64', 'gbk')
addfile['Content-Type'] = 'application/octet-stream'
addfile.add_header('Content-Disposition', 'attachment', filename='文件名稱.csv')
message.attach(addfile)
帶附件的郵件發送成功截圖如下:
關注微信公衆號【知秋小夢】後臺回覆“郵件附件”獲取源代碼
帶html格式及圖片的郵件發送成功截圖如下:
關注微信公衆號【知秋小夢】後臺回覆“郵件html”獲取源代碼
發送郵件的用處還是挺大的,當你的自動運行腳本寫好後,可以設置發送處理結果到你的郵箱中,或者直接通過郵箱發給其他同事,省時省力,建議掌握。
系列文章傳送門
Python系列
Python系列會持續更新,從基礎入門到進階技巧,從編程語法到項目實戰。若您在閱讀的過程中發現文章存在錯誤,煩請指正,非常感謝;若您在閱讀的過程中能有所收穫,歡迎一起分享交流。
如果你也想和我一起學習Python,可以關注我
學習Python,我們不只是說說而已