自己寫程式碼實現郵件傳送,再也不用視覺化那麼麻煩了!

lalala_py發表於2021-02-15

學而知不足,長按關注,精彩不錯過

Python自動批量傳送郵件是一種什麼體驗?

前言

很多時候,我們在傳送一些郵件資訊的時候,在視覺化的介面巴拉巴拉操作一頓,其實就是一些很簡單的資訊,然後可能傳送的收信者比較多,帶來很多的麻煩,主要是浪費了我們的時間!

準備工作

很重要重要重要的準備工作,帶你進入程式碼傳送郵件的氛圍!

看著前面小哥哥把每個訂單號都貼上到郵件裡,然後再給一個收件人的聯絡郵箱,如此熟練的操作,整整做了一個上午,因為需要給每個收件人單獨傳送,我心裡有種說不出來的感覺 ...

這就像剛剛工作那會兒看著旁邊跟我一樣的實習生在重複插入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 = "xxx@163.com"
# 接受者郵箱(改為自己的)
receiver = "xxx@qq.com"
# 伺服器地址
smtp_addr = "smtp.163.com"
# 郵件伺服器賬號和密碼,自己的163郵箱的登入賬號和密碼
login_user = "xxx@163.com"
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 來說,有莫大的幫助!

文中有任何錯誤的地方,煩請不吝賜教。非常感謝!

相關文章