小白入門,用python 發(fā)送定時郵件,將Dataframe轉(zhuǎn)為郵件正文,鏈接顯示為圖片

在實際工作中,我們常常會遇到定時發(fā)送郵件的任務(wù),基于我的實踐,分享給大家,也許一篇文章寫不完,就先列個目錄。

本文想要解決的問題:

  1. 用python構(gòu)造一封郵件,并設(shè)置定時發(fā)送出去。往往,這只是最低級的需求,實際工作中會有各種細(xì)節(jié)和附加條件。
  2. 學(xué)會構(gòu)造文本、HTML兩種格式的郵件正文,學(xué)會構(gòu)造和添加附件,其中,HTML格式要學(xué)會使用超鏈接,學(xué)會添加CSS用來美化正文。
  3. 將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>

在瀏覽器中顯示如下:


image.png

現(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個問題需要重視:
    1. 附件的路徑,最好是使用全路徑。
    1. 附件的中文名稱,需要設(shè)置編碼。
      添加附件前,我們需要確定附件的位置,也就是在系統(tǒng)上的路徑。關(guān)于路徑,我是吃過大虧的,所以各位新手也要注意,在不同的系統(tǒng)(linux和windows)是不一樣的路徑,分隔符也有區(qū)別,特別是要定時跑的腳本,在linux系統(tǒng)中的不同位置運(yùn)行該腳本,相對路徑都不一樣,稍不注意就會break掉。

假如我要添加的附件是下面這個:

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

image.png

如果是直接將這個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é)果:


image.png

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容