在實際工作中,我們常常會遇到定時發(fā)送郵件的任務(wù),基于我的實踐,分享給大家,也許一篇文章寫不完,就先列個目錄。
本文想要解決的問題:
- 用python構(gòu)造一封郵件,并設(shè)置定時發(fā)送出去。往往,這只是最低級的需求,實際工作中會有各種細(xì)節(jié)和附加條件。
- 學(xué)會構(gòu)造文本、HTML兩種格式的郵件正文,學(xué)會構(gòu)造和添加附件,其中,HTML格式要學(xué)會使用超鏈接,學(xué)會添加CSS用來美化正文。
- 將Dataframe格式的表格直接轉(zhuǎn)化為HTML格式的表格,如果有超鏈接,要學(xué)會更改超鏈接,使之能完全顯示,并在HTML正文顯示對應(yīng)的連接內(nèi)容(比如顯示連接的圖片)。
1. 初步學(xué)會使用python編寫發(fā)送郵件的腳本
關(guān)于python發(fā)郵件的類似文章有很多,不過,作為初學(xué)者,依然有許多需要注意的細(xì)節(jié),如果作者沒有寫清楚的話,是很容易讓人抓狂的。
由于2020年官方就停止更新和支持python2,所以本文順應(yīng)大勢,使用的python3.6
1. python庫
- email庫,用來編輯郵件內(nèi)容的,包括標(biāo)題,發(fā)件人,接收人,正文等。
- smtplib庫,用來發(fā)送郵件的,包括創(chuàng)建郵件服務(wù),登陸,發(fā)送,退出等動作
一般來說,我是做如下導(dǎo)入,每一個模塊都有相應(yīng)的說明,具體應(yīng)用繼續(xù)看后面的內(nèi)容。
# 導(dǎo)入相關(guān)庫-email
from email.mime.multipart import MIMEMultipart # 構(gòu)建郵件頭信息,包括發(fā)件人,接收人,標(biāo)題等
from email.mime.text import MIMEText # 構(gòu)建郵件正文,可以是text,也可以是HTML
from email.mime.application import MIMEApplication # 構(gòu)建郵件附件,理論上,只要是文件即可,一般是圖片,Excel表格,word文件等
from email.header import Header # 專門構(gòu)建郵件標(biāo)題的,這樣做,可以支持標(biāo)題中文
import smtplib
2. 發(fā)送一個最簡單的hello word的郵件(有重點(diǎn))
-
發(fā)件人信息(重點(diǎn))
這一小節(jié)的重點(diǎn),也是很多小白容易犯糊涂的地方,就是發(fā)件人的賬號和密碼,以及相應(yīng)的郵件服務(wù)器設(shè)置。不同的郵箱,其規(guī)則完全不一樣,如果你有企業(yè)郵箱,那最好用企業(yè)郵箱,這點(diǎn)要記住,因為個人郵箱很容易出現(xiàn)網(wǎng)絡(luò)問題、觸發(fā)反垃圾機(jī)制等等,這是實踐的出來的經(jīng)驗。另外,如果你使用過Foxmail、outlook等第三方郵件服務(wù)器,那你就更容易理解了。
上面箭頭所指,就是163個人郵箱的發(fā)件服務(wù)器
上面箭頭所指,就是163個人郵箱的發(fā)件服務(wù)器:smtp.163.com,如果是163的企業(yè)郵箱,其服務(wù)器地址則是:smtp.ym.163.com,我就是用的這個。
下面我要將的內(nèi)容很關(guān)鍵:163個人郵箱的密碼,不是登陸密碼,而是客戶端授權(quán)碼,如下圖所示:
image.png
我們這里是屬于使用SMTP服務(wù)登陸和發(fā)送郵件的,所以使用常規(guī)的登陸密碼,是無法發(fā)送郵件的。
然而,163的企業(yè)郵箱,卻沒有這個選項,直接使用登陸密碼就可以發(fā)送郵件(我一直沒明白為什么不一樣,也許企業(yè)郵箱默認(rèn)的就是開通了這些服務(wù)的,給我們的密碼也即是授權(quán)碼)。
常見的qq郵箱,谷歌郵箱,雅虎郵箱都是有這些區(qū)別的,新手一定要注意。下面就是我發(fā)送郵件的賬號的密碼設(shè)置,大家可以參照一下,不懂的直接在評論區(qū)@我:
# 郵件服務(wù)信息,個人
# smtp_server = 'smtp.163.com'
# username = "lihua.0221@163.com"
# password = 'xxxxxx' # 授權(quán)碼,并不是郵箱登陸密碼
# 郵件服務(wù)信息,公司
smtp_server = 'smtp.ym.163.com'
username = "lihua@everimaging.com"
password = 'xxxxxxxxx' # 授權(quán)碼,企業(yè)163的就是登陸密碼
這些信息,我們在構(gòu)建郵件的發(fā)件人的時候需要用到,在使用SMTP發(fā)送郵件的時候也會用到,所以,一開始就給出來。
- 構(gòu)建郵件正文
# 郵件發(fā)送和接收人
sender = username
receiver = ['lihua@everimaging.com', '724694053@qq.com']
# 郵件頭信息
msg = MIMEMultipart('related')
msg['Subject'] = Header("我的第一封python郵件")
msg["From"] = sender
msg['To'] = ','.join(receiver) # 這里要注意
# text 內(nèi)容
content_text = MIMEText("Hello World", "text", "utf-8")
msg.attach(content_text)
可以看到,這一節(jié)沒有什么難點(diǎn),先是定義發(fā)送者和接收人,然后使用MIMEMultipart類構(gòu)建一個消息體msg,然后定義msg中的主題,發(fā)件人,接收人。其中,主題使用了Header類封裝,目的是為了支持中文,最后,添加一段text的正文“hello world”,使用的是MIMEText類封裝,第一個參數(shù)代表內(nèi)容,第二個參數(shù)代表類型是text,另外還有html類型可選,下節(jié)介紹,最后一個參數(shù)是定義編碼。
這里面只有一個地方需要注意,那就是msg['To'] = ','.join(receiver)這里,我們的郵件接收人是可以很多人的(列表),但是還需要用逗號把它們連接成一個字符串(email庫的bug),如果是直接將列表扔給它,是要出錯的。
- 發(fā)送郵件
# 發(fā)送郵件,測試成功,流程都是固定的:創(chuàng)建客戶端,登陸,發(fā)送,關(guān)閉
email_client = smtplib.SMTP(smtp_server)
email_client.login(username, password)
email_client.sendmail(sender, receiver, msg.as_string())
email_client.quit()
這段代碼,先是使用前面定義的郵件發(fā)送服務(wù)器:smtp_server = 'smtp.ym.163.com'來創(chuàng)建一個SMTP服務(wù),然后傳入賬號和密碼執(zhí)行登陸,然后是發(fā)送郵件,需要的參數(shù)有:發(fā)送人,接收人,消息體,其中消息體執(zhí)行了as_string(),將整個msg對象轉(zhuǎn)化為了字符串,最后是退出服務(wù)。
這樣,我們的第一封郵件就發(fā)送成功了。下面是這一階段的完整代碼,我將自己賬號的password隱藏了,你只需要將你的賬號信息替換進(jìn)去,執(zhí)行即可,如果沒有成功,出現(xiàn)了任何不能解決的問題,請在評論區(qū)@我。
# 導(dǎo)入相關(guān)庫-email
from email.mime.multipart import MIMEMultipart # 構(gòu)建郵件頭信息,包括發(fā)件人,接收人,標(biāo)題等
from email.mime.text import MIMEText # 構(gòu)建郵件正文,可以是text,也可以是HTML
from email.mime.application import MIMEApplication # 構(gòu)建郵件附件,理論上,只要是文件即可,一般是圖片,Excel表格,word文件等
from email.header import Header # 專門構(gòu)建郵件標(biāo)題的,這樣做,可以支持標(biāo)題中文
import smtplib
def send_email():
"""發(fā)送郵件的腳本"""
# 郵件服務(wù)信息,個人
# smtp_server = 'smtp.163.com'
# username = "lihua.0221@163.com"
# password = 'xxxxx' # 授權(quán)碼,并不是郵箱登陸密碼
# 郵件服務(wù)信息,公司
smtp_server = 'smtp.ym.163.com'
username = "lihua@everimaging.com"
password = 'xxxxx' # 授權(quán)碼,企業(yè)163的就是登陸密碼
# 郵件發(fā)送和接收人
sender = username
receiver = ['lihua@everimaging.com', '724694053@qq.com']
# 郵件頭信息
msg = MIMEMultipart('related')
msg['Subject'] = Header("我的第一封python郵件")
msg["From"] = sender
msg['To'] = ','.join(receiver) # 這里要注意
# text 內(nèi)容
content_text = MIMEText("Hello World", "text", "utf-8")
msg.attach(content_text)
# 發(fā)送郵件,測試成功,流程都是固定的:創(chuàng)建客戶端,登陸,發(fā)送,關(guān)閉
email_client = smtplib.SMTP(smtp_server)
email_client.login(username, password)
email_client.sendmail(sender, receiver, msg.as_string())
email_client.quit()
if __name__ == '__main__':
send_email()
2. 學(xué)會構(gòu)建HTML格式的正文,添加附件
前面我們已經(jīng)學(xué)會了基本的郵件發(fā)送腳本編寫,正文使用的是text,但是,我們常見的郵件基本都是以HTML格式作為正文的,偶爾還會帶上一些附件。
-
HTML
HTML就是網(wǎng)頁,使用這種格式的正文,可以使我們的郵件內(nèi)容變得豐富無比,理論上,網(wǎng)頁可以做成什么樣,我們HTML格式的郵件正文就可以做成什么樣??!
比如,我有下面這樣一個網(wǎng)頁:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>這是一封python寫的郵件,使用的是HTML格式構(gòu)造正文</h1>
<h2>可以為文字添加超鏈接,比如:<a href="http://www.itdecent.cn/u/8159970c6959">簡書-小溏</a></h2>
<hr>
<h3>還可以添加圖片,比如下面這張</h3>
<img src="https://pub-static.haozhaopian.net/assets/projects/export/jpg/29736970-a991-4b91-91af-854a8eb561e6.jpg">
</body>
</html>
在瀏覽器中顯示如下:

現(xiàn)在,我將它放進(jìn)我的郵件正文中,使用HTML格式,這種方式可以為文字添加超鏈接,可以插入圖片
# 定義一個字符串,內(nèi)容就是HTML代碼
html_msg = \
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>這是一封python寫的郵件,使用的是HTML格式構(gòu)造正文</h1>
<h2>可以為文字添加超鏈接,比如:<a href="http://www.itdecent.cn/u/8159970c6959">簡書-小溏</a></h2>
<hr>
<h3>還可以添加圖片,比如下面這張</h3>
<img src="https://pub-static.haozhaopian.net/assets/projects/export/jpg/29736970-a991-4b91-91af-854a8eb561e6.jpg">
</body>
</html>
"""
# html 內(nèi)容
content_html = MIMEText(html_msg, "html", "utf-8")
msg.attach(content_html)
我們定義好HTML字符串,然后使用MIMEText類封裝它,第二個參數(shù)寫“html”,同樣添加(attach)到msg對象中。這和我們前面添加“hello word”這種純text的內(nèi)容方式是一樣的,如果你現(xiàn)在還不明白上面這段代碼該放在哪個位置,稍后我會給出完整的代碼。
-
添加附件
關(guān)于附件,有2個問題需要重視: - 附件的路徑,最好是使用全路徑。
- 附件的中文名稱,需要設(shè)置編碼。
添加附件前,我們需要確定附件的位置,也就是在系統(tǒng)上的路徑。關(guān)于路徑,我是吃過大虧的,所以各位新手也要注意,在不同的系統(tǒng)(linux和windows)是不一樣的路徑,分隔符也有區(qū)別,特別是要定時跑的腳本,在linux系統(tǒng)中的不同位置運(yùn)行該腳本,相對路徑都不一樣,稍不注意就會break掉。
- 附件的中文名稱,需要設(shè)置編碼。
假如我要添加的附件是下面這個:
excel_file_path = r'E:\WorkSpace\pythonProjects\Ontime_Script\attach_table\recurring_pay_failed_user_info_2018-05-09.xlsx'
我寫的是windows下的全路徑,分隔符使用的是單個的正斜杠,前面加了個r,可以使那種類似轉(zhuǎn)義符的代碼失效。
如果是Linux下,該是這樣的:
excel_file_path = '/root/pythonProjects/Ontime_Script/attach_table/recurring_pay_failed_user_info_2018-05-09.xlsx'
寫成全路徑,無論是在哪個目錄下運(yùn)行該腳本,都不會出現(xiàn)錯誤,這點(diǎn)要注意,相對路徑是很坑人的。
# 構(gòu)造附件,測試成功,附件有很多類型,現(xiàn)在構(gòu)建的是html文件
attach_table = MIMEApplication(open(excel_file_path, 'rb').read())
# 給附件增加標(biāo)題
attach_table.add_header('Content-Disposition', 'attachment',filename='我的附件.xlsx')
# 這樣的話,附件名稱就可以是中文的了,不會出現(xiàn)亂碼
attach_table.set_charset('utf-8')
msg.attach(attach_table)
上面就是為msg對象添加附件的全過程了:先將xlsx文件讀成二進(jìn)制,作為參數(shù)構(gòu)造MIMEApplication類,第二步是為這個附件添加名稱(這個名稱是在郵件中顯示的),如果是中文,還需要設(shè)置一下編碼,否則中文會顯示為亂碼,最后添加到msg中。
下面就是此節(jié)的全部代碼:
# 導(dǎo)入相關(guān)庫-email
from email.mime.multipart import MIMEMultipart # 構(gòu)建郵件頭信息,包括發(fā)件人,接收人,標(biāo)題等
from email.mime.text import MIMEText # 構(gòu)建郵件正文,可以是text,也可以是HTML
from email.mime.application import MIMEApplication # 構(gòu)建郵件附件,理論上,只要是文件即可,一般是圖片,Excel表格,word文件等
from email.header import Header # 專門構(gòu)建郵件標(biāo)題的,這樣做,可以支持標(biāo)題中文
import smtplib
def send_email(html_msg):
"""發(fā)送郵件的腳本"""
# 郵件服務(wù)信息,個人
# smtp_server = 'smtp.163.com'
# username = "lihua.0221@163.com"
# password = 'xxxxx' # 授權(quán)碼,并不是郵箱登陸密碼
# 郵件服務(wù)信息,公司
smtp_server = 'smtp.ym.163.com'
username = "lihua@everimaging.com"
password = 'xxxxxx' # 授權(quán)碼,企業(yè)163的就是登陸密碼
# 郵件發(fā)送和接收人
sender = username
receiver = ['lihua@everimaging.com', '724694053@qq.com']
# 郵件頭信息
msg = MIMEMultipart('related')
msg['Subject'] = Header("我的第一封python郵件")
msg["From"] = sender
msg['To'] = ','.join(receiver) # 這里要注意
html_msg = \
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>這是一封python寫的郵件,使用的是HTML格式構(gòu)造正文</h1>
<h2>可以為文字添加超鏈接,比如:<a href="http://www.itdecent.cn/u/8159970c6959">簡書-小溏</a></h2>
<hr>
<h3>還可以添加圖片,比如下面這張</h3>
<img src="https://pub-static.haozhaopian.net/assets/projects/export/jpg/29736970-a991-4b91-91af-854a8eb561e6.jpg">
</body>
</html>
"""
# html 內(nèi)容
content_html = MIMEText(html_msg, "html", "utf-8")
msg.attach(content_html)
excel_file_path = r'E:\WorkSpace\pythonProjects\Ontime_Script\email_market_report\attach_table\recurring_pay_failed_user_info_2018-05-09.xlsx'
# 構(gòu)造附件,測試成功,附件有很多類型,現(xiàn)在構(gòu)建的是xlsx文件
attach_table = MIMEApplication(open(excel_file_path, 'rb').read())
# 給附件增加標(biāo)題
attach_table.add_header('Content-Disposition', 'attachment',filename='我的附件.xlsx')
# 這樣的話,附件名稱就可以是中文的了,不會出現(xiàn)亂碼
attach_table.set_charset('utf-8')
msg.attach(attach_table)
# 發(fā)送郵件,測試成功,流程都是固定的:創(chuàng)建客戶端,登陸,發(fā)送,關(guān)閉
email_client = smtplib.SMTP(smtp_server)
email_client.login(username, password)
email_client.sendmail(sender, receiver, msg.as_string())
email_client.quit()
if __name__ == '__main__':
send_email()
如果你需要添加其他類型的附件,比如圖片,word,壓縮包等,都是一樣的,只是把文件名換一下即可,還有附件名稱的后綴。
學(xué)到此處,基本的郵件發(fā)送是沒問題了,但,往往實際工作中沒有這么簡單,HTML代碼不是現(xiàn)成的,附件也需要臨時生成等等。
3. 將Dataframe轉(zhuǎn)為HTML,用CSS美化表格,設(shè)置URL,使之顯示完全等細(xì)節(jié)工作
定時郵件,經(jīng)常會伴隨著實時數(shù)據(jù)的展現(xiàn),在python中使用最多的是pandas包下面的DataFrame類,它就像一個Excel表格一樣,可以完美的展示數(shù)據(jù),但是,我們該如何將它完美的展現(xiàn)在郵件的正文中呢?
現(xiàn)在我給出一個示例的表格數(shù)據(jù):
源數(shù)據(jù)鏈接:https://pan.baidu.com/s/1m9v3i153-M17Q8D6cmnMjw 密碼:k8pk

如果是直接將這個Excel文件作為附件發(fā)送到郵件里,查看郵件的人是很苦惱的,首先還要下載附件,打開Excel,后面的縮略圖還只是URL,想看具體長什么樣,還得一個一個點(diǎn)開在瀏覽器里面查看。
現(xiàn)在,如果用HTML正文格式展示這個表格,上面講到的痛點(diǎn)都會解決。
首先,我們讀取Excel文件成為Dataframe格式
import pandas as pd
df = pd.read_excel(r"E:\WorkSpace\pythonProjects\Ontime_Script\attach_table\template_use.xlsx")
Dataframe有一個函數(shù)是to_html(),可以直接將df轉(zhuǎn)為HTML中的table,它的參數(shù)相當(dāng)多
def to_html(self, buf=None, columns=None, col_space=None, header=True,
index=True, na_rep='NaN', formatters=None, float_format=None,
sparsify=None, index_names=True, justify=None, bold_rows=True,
classes=None, escape=True, max_rows=None, max_cols=None,
show_dimensions=False, notebook=False, decimal='.',
border=None):
現(xiàn)在,我們先把df中的縮略圖包裝一下,以適應(yīng)HTML中顯示圖片的格式
df['縮略圖'] = '<img src="' + df['縮略圖'] + '">'
然后執(zhí)行轉(zhuǎn)換
df_html = df.to_html(escape=False)
escape這個參數(shù)是:Convert the characters <, >, and & to HTML-safe sequences.=
就是說,我們df里面,如果有HTML的特有元素,是轉(zhuǎn)化為轉(zhuǎn)義的呢?還是保持本身的樣子不變。顯然,我們設(shè)置了img的格式,要在HTML中展示圖片,比如下面這個
<img src="https://pub-static.haozhaopian.net/assets/projects/export/jpg/dd73de46-7b9b-45ca-b89b-651843304f59.jpg">
我們不希望將<這種符號變?yōu)?lt;,而是保持本身的樣子,所以將escape設(shè)置為False,(也許我沒有講清楚,不過你可以在實踐中設(shè)置為True,看看最終會發(fā)生什么,其實,默認(rèn)的就是True)。
現(xiàn)在,我們的任務(wù)就是,構(gòu)造一個HTML的完整格式,然后將這個df_html 放進(jìn)去即可,對于HTML的美化,我也一并放在代碼中了,不在這里一一講解。
本節(jié)全部的代碼:
import pandas as pd
# 導(dǎo)入相關(guān)庫-email
from email.mime.multipart import MIMEMultipart # 構(gòu)建郵件頭信息,包括發(fā)件人,接收人,標(biāo)題等
from email.mime.text import MIMEText # 構(gòu)建郵件正文,可以是text,也可以是HTML
from email.mime.application import MIMEApplication # 構(gòu)建郵件附件,理論上,只要是文件即可,一般是圖片,Excel表格,word文件等
from email.header import Header # 專門構(gòu)建郵件標(biāo)題的,這樣做,可以支持標(biāo)題中文
pd.set_option('display.max_colwidth', -1) # 能顯示的最大寬度, 否則to_html出來的地址就不全
def get_html_msg():
"""
1. 構(gòu)造html信息
"""
df = pd.read_excel(r"E:\WorkSpace\pythonProjects\Ontime_Script\email_market_report\attach_table\template_use.xlsx")
df['縮略圖'] = '<img src="' + df['縮略圖'] + '">'
df_html = df.to_html(escape=False)
head = \
"""
<head>
<meta charset="utf-8">
<STYLE TYPE="text/css" MEDIA=screen>
table.dataframe {
border-collapse: collapse;
border: 2px solid #a19da2;
/*居中顯示整個表格*/
margin: auto;
}
table.dataframe thead {
border: 2px solid #91c6e1;
background: #f1f1f1;
padding: 10px 10px 10px 10px;
color: #333333;
}
table.dataframe tbody {
border: 2px solid #91c6e1;
padding: 10px 10px 10px 10px;
}
table.dataframe tr {
}
table.dataframe th {
vertical-align: top;
font-size: 14px;
padding: 10px 10px 10px 10px;
color: #105de3;
font-family: arial;
text-align: center;
}
table.dataframe td {
text-align: center;
padding: 10px 10px 10px 10px;
}
body {
font-family: 宋體;
}
h1 {
color: #5db446
}
div.header h2 {
color: #0002e3;
font-family: 黑體;
}
div.content h2 {
text-align: center;
font-size: 28px;
text-shadow: 2px 2px 1px #de4040;
color: #fff;
font-weight: bold;
background-color: #008eb7;
line-height: 1.5;
margin: 20px 0;
box-shadow: 10px 10px 5px #888888;
border-radius: 5px;
}
h3 {
font-size: 22px;
background-color: rgba(0, 2, 227, 0.71);
text-shadow: 2px 2px 1px #de4040;
color: rgba(239, 241, 234, 0.99);
line-height: 1.5;
}
h4 {
color: #e10092;
font-family: 楷體;
font-size: 20px;
text-align: center;
}
td img {
/*width: 60px;*/
max-width: 300px;
max-height: 300px;
}
</STYLE>
</head>
"""
# 構(gòu)造模板的附件(100)
body = \
"""
<body>
<div align="center" class="header">
<!--標(biāo)題部分的信息-->
<h1 align="center">我的python郵件,使用了Dataframe轉(zhuǎn)為table </h1>
</div>
<hr>
<div class="content">
<!--正文內(nèi)容-->
<h2>帶圖片展示的表格</h2>
<div>
<h4></h4>
{df_html}
</div>
<hr>
<p style="text-align: center">
—— 本次報告完 ——
</p>
</div>
</body>
""".format(df_html=df_html)
html_msg= "<html>" + head + body + "</html>"
# 這里是將HTML文件輸出,作為測試的時候,查看格式用的,正式腳本中可以注釋掉
fout = open('t4.html', 'w', encoding='UTF-8', newline='')
fout.write(html_msg)
return html_msg
def send_data_df(html_msg):
"""發(fā)送郵件的腳本"""
# 郵件服務(wù)信息,個人
# smtp_server = 'smtp.163.com'
# username = "lihua.0221@163.com"
# password = 'xxxxxx' # 授權(quán)碼,并不是郵箱登陸密碼
# 郵件服務(wù)信息,公司
smtp_server = 'smtp.ym.163.com'
username = "lihua@everimaging.com"
password = 'xxxxxx' # 授權(quán)碼,企業(yè)163的就是登陸密碼
# 郵件發(fā)送和接收人
sender = username
receiver = ['lihua@everimaging.com', '724694053@qq.com']
# 郵件頭信息
msg = MIMEMultipart('related')
msg['Subject'] = Header("我的第一封python郵件")
msg["From"] = sender
msg['To'] = ','.join(receiver) # 這里要注意
# html 內(nèi)容
content_html = MIMEText(html_msg, "html", "utf-8")
msg.attach(content_html)
# 發(fā)送郵件,測試成功,流程都是固定的:創(chuàng)建客戶端,登陸,發(fā)送,關(guān)閉
email_client = smtplib.SMTP(smtp_server)
email_client.login(username, password)
email_client.sendmail(sender, receiver, msg.as_string())
email_client.quit()
if __name__ == '__main__':
html_msg = get_html_msg()
send_data(html_msg)
上面的代碼里,CSS占了很長一段,我沒有解釋,如果有任何問題,請聯(lián)系我。
另外,這段代碼里還有一個很重要的
pd.set_option('display.max_colwidth', -1) # 能顯示的最大寬度, 否則to_html出來的地址就不全
這是設(shè)置Dataframe的顯示寬度的,因為縮略圖那一列的內(nèi)容很長,如果沒有上訴設(shè)置的話,轉(zhuǎn)出來的地址就被省略了一部分,使得無法顯示圖片,如果大家想測試其功能,可以注釋掉,看看會發(fā)生什么結(jié)果。最后,附上這個郵件的發(fā)送結(jié)果:

很漂亮有木有~~~~,一眼就看到了圖片長什么樣,還有跟它相關(guān)的信息在一起,也不用下載附件再點(diǎn)開url了。
還有,如果大家想知道沒有CSS美化的結(jié)果是什么樣,可以注釋掉CSS部分代碼,然后運(yùn)行看一看。
今天的分享就這樣了,祝大家學(xué)習(xí)愉快。

