目錄
- 前言
- 準備工作
- 發送其他格式的郵件
- 1. 發送 HTML 格式的郵件
- 2. 發送帶有附件的郵件
- End
學而知不足,長按關注,精彩不錯過
Python自動批量發送郵件是一種什麼體驗?
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiETPwJWZ3ZCMwcTP39zZuBnLuVzRjV3ZE5EMJpXT3VEVPlHMp1EeNRUT3VFRNRTRq50dFRUT4lERNlHMD1kMVpXT1UkaNZXRE1EeJRUT5hzQNJTV61UNFpWT2NmMiNnSywEd5ITW110MaZHetlVdO1GT3lERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)
前言
很多時候,我們在發送一些郵件資訊的時候,在可視化的界面巴拉巴拉操作一頓,其實就是一些很簡單的資訊,然後可能發送的收信者比較多,帶來很多的麻煩,主要是浪費了我們的時間!
準備工作
很重要重要重要的準備工作,帶你進入代碼發送郵件的氛圍!
看着前面小哥哥把每個訂單号都粘貼到郵件裡,然後再給一個收件人的聯系郵箱,如此熟練的操作,整整做了一個上午,因為需要給每個收件人單獨發送,我心裡有種說不出來的感覺 ...
這就像剛剛工作那會兒看着旁邊跟我一樣的實習生在重複插入sql一樣,他居然不知道列編輯,然而要一行一行一個字一個字的敲進去一樣的感受。
如果有不知道的同學也可以私信我,幾分鐘的事情可能對于不知道這個技巧的同學需要幾個小時才能完成
進行正題!!!!!
自動化發郵件之前,首先需要用到的兩個重要的 Python 子產品:smtplib 和 email
smtplib子產品主要用來建立伺服器連結、伺服器斷開的工作;
email子產品主要負責郵件的建構,比如收件人、郵件标題、郵件内容等
我用的是python2.7版本,是以安裝這兩個庫:
pip2.7 install secure-smtplib
pip2.7 install email
安裝準備好需要的包,下面就開始發送郵件的操作,執行個體化操作
# 執行個體化SMTP
smtp = smtplib.SMTP()
# 連結郵件伺服器
smtp.connect(smtp_addr)
# 配置發送郵箱的使用者名和密碼
smtp.login(login_user, login_passwd)
MIMEText 類是 MIMENonMultipart 類的子類,一般用于用于封裝文本類型的郵件
執行個體化郵件伺服器資訊,可以進行相應的配置,郵件的标題、郵件的收發郵件資訊、當然還可以進行抄送
# 郵件正文
words = "First Message"
# 配置發送内容msg
msg = MIMEText(words, 'plain', 'utf-8')
# 郵件标題
msg['Subject'] = Header("MyTestTitle",'utf-8')
# 發信人位址
msg['from'] = sender
# 收信人位址(支援群發)
msg['to'] = ';'.join([receiver])
# 抄送人位址(支援群發)
msg['Cc'] = ';'.join([receiver])
在完成了以上的操作之後,然後配置自己的資訊就可以進行操作發送了。
當然在我給到的代碼中,都是以變量給出的,首先咱們需要初始化
# 發送者郵箱(改為自己的)
sender = "[email protected]"
# 接受者郵箱(改為自己的)
receiver = "[email protected]"
# 伺服器位址
smtp_addr = "smtp.163.com"
# 郵件伺服器賬号和密碼,自己的163郵箱的登入賬号和密碼
login_user = "[email protected]"
login_passwd = "xxx"
最後,關鍵一步,可以發送了,但是記得要關閉連接配接哦!
參數格式:
sendmail(self, from_addr, to_addrs, msg, mail_options=[], rcpt_options=[])
# 發送郵件
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print("郵件發送成功 ^_^ ")
哈哈,看看我的界面,已經收到了哈!
跟着試了的同學以及攻城獅們,成功了沒有
需要我發送代碼的,給我留言哈,可以公号背景私信我吆!!
也可以自取哈!位址: https://pan.baidu.com/s/1At5rsu59QZ0BLQ6ETpPEvw 密碼: s8ew
發送其他格式的郵件
上述展示了普通格式的郵件發送格式,下面咱們再看看想要發送一些HTML格式的,還有帶附件的郵件形式。
再然後就可以自行發揮發送任何格式群組合的郵件了!
1. 發送 HTML 格式的郵件
在建立 MIMEText 時,将 _subtype 設定為 “html”,則可發送 html 格式的郵件
其他步驟和發送純文字郵件配置和代碼格式都一緻
跟上面文本格式郵件對比下哈,會有很清晰的思路:
# 普通文本格式
msg = MIMEText(words, 'plain', 'utf-8')
# html 格式
msg = MIMEText(words, 'plain', 'utf-8')
貼出詳細代碼
# 郵件正文
words = """
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<table border="1">
<tr>
<th>Python</th>
<th>程式設計愛好者</th>
</tr>
<tr>
<td>需要代碼的同學</td>
<td>加我微信</td>
</tr>
<tr>
<td>Johngo106X</td>
<td>雙手奉上!</td>
</tr>
</table>
</body>
</html>
"""
# 配置發送内容msg
msg = MIMEText(words, 'html', 'utf-8')
# 郵件标題
msg['Subject'] = Header("測試發送HTML資訊",'utf-8')
# 發信人位址
msg['from'] = sender
# 收信人位址(支援群發)
msg['to'] = ';'.join([receiver])
# 抄送人位址(支援群發)
msg['Cc'] = ';'.join([receiver])
# 執行個體化SMTP
smtp = smtplib.SMTP()
# 連結郵件伺服器
smtp.connect(smtp_addr)
# 配置發送郵箱的使用者名和密碼
smtp.login(login_user, login_passwd)
# 發送郵件
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print("郵件發送成功!")
一些自定義的變量可以自己設定哈,全量代碼可以在網盤中自取!!!
哈, 再看看 Johngo 的結果:
下面再看看重要的附件,是怎麼操作的
2. 發送帶有附件的郵件
類似的操作方法,不同的操作是執行個體化發送資訊的這塊稍有差別
# 配置發送内容msg
msg = MIMEMultipart()
同樣的我先把代碼附上,需要詳細代碼的請自取
# 郵件正文
words = """
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<table border="1">
<tr>
<th>Python</th>
<th>程式設計愛好者</th>
</tr>
<tr>
<td>需要代碼的同學</td>
<td>加我微信</td>
</tr>
<tr>
<td>Johngo106X</td>
<td>雙手奉上!</td>
</tr>
<tr>
<td>原文連結</td>
<td>xxx</td>
</tr>
</table>
</body>
</html>
"""
# 配置發送内容msg
msg = MIMEMultipart()
# 郵件正文
msg.attach(payload=MIMEText(words, _subtype="html", _charset="utf-8"))
# 郵件标題
msg['Subject'] = Header("附件郵件發送測試",'utf-8')
# 發信人位址
msg['from'] = sender
# 收信人位址(支援群發)
msg['to'] = ';'.join([receiver])
# 抄送人位址(支援群發)
msg['Cc'] = ';'.join([receiver])
for file_path in {"test1.xlsx", "test2.xlsx"}:
attachment = MIMEText(_text=open(file_path, "rb").read(), _subtype="base64", _charset="utf-8")
attachment["Content-Type"] = "application/octet-stream"
attachment["Content-Disposition"] = "attachment; filename=%s" % file_path
msg.attach(payload=attachment)
# 執行個體化SMTP
smtp = smtplib.SMTP()
# 連結郵件伺服器
smtp.connect(smtp_addr)
# 配置發送郵箱的使用者名和密碼
smtp.login(login_user, login_passwd)
# 發送郵件
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print("郵件發送成功!")
同樣的,咱們看看附件過來了沒有
End
比較簡單的幾行代碼,在某些時候就可以将事情事半功倍,适用于定時發郵件、快速自定義的發送相同檔案内容的場景
代碼先放到網盤,就暫且不往github上傳了,位址連結: https://pan.baidu.com/s/1At5rsu59QZ0BLQ6ETpPEvw 密碼: s8ew,自取哈!!
另外,我給到的是最基本的 Python 自定義發送郵件的操作,拿到手的同學和攻城獅們可以進行再次封裝,更加好用一些。同時也可以分享出來
好了,今天就是有關自定義發送郵件小工具的全部分享内容了,如果感覺對你有些許幫助,還請輕輕點選轉發,讓更多的人看到,對 Johngo 來說,有莫大的幫助!
文中有任何錯誤的地方,煩請不吝賜教。非常感謝!