Datafram 實現作為正文發送郵件


一、發送郵件

  若還不知道如何使用 python 來發送郵件,請先參考這篇博客 https://www.cnblogs.com/shenh/p/14267345.html 。

這一篇講述了如何構造 文本、html、附件、圖片等格式的郵件。

 

二、將 Datafram 作為正文發送郵件

  我們使用 pandas 處理完數據后,會把表格里的數據以郵件的形式發送出去,那要怎么做呢?這里提供一個簡單的處理方式:

1、將 datafram 格式的表格轉化成 html 格式的表格,可使用 to_html() 方法直接轉化。

import pandas

data_dic = {'機型':['小米12','華為P40','IQOO8','iphone13'],'價格':[3999,5000,3899,5999],'顏色':['白色','紫色','金色','白色']}
# 轉成 datafram 格式
df = pandas.DataFrame(data_dic)
# 轉化成 HTML 格式
df_html = df.to_html()

 

 2、將 MIMEText() 方法第二個參數設置為 'html' ,然后發送郵件。

import pandas
from smtplib import SMTP_SSL
from email.mime.text import MIMEText

def sendMail(message,Subject,sender_show,recipient_show,to_addrs,cc_show=''):
    '''
    :param message: str 郵件內容
    :param Subject: str 郵件主題描述
    :param sender_show: str 發件人顯示,不起實際作用如:"xxx"
    :param recipient_show: str 收件人顯示,不起實際作用 多個收件人用','隔開如:"xxx,xxxx"
    :param to_addrs: str 實際收件人
    :param cc_show: str 抄送人顯示,不起實際作用,多個抄送人用','隔開如:"xxx,xxxx"
    '''
    # 填寫真實的發郵件服務器用戶名、密碼
    user = 'root'
    password = '123456'
    # 郵件內容
    msg = MIMEText(message, 'html', _charset="utf-8")
    # 郵件主題描述
    msg["Subject"] = Subject
    # 發件人顯示,不起實際作用
    msg["from"] = sender_show
    # 收件人顯示,不起實際作用
    msg["to"] = recipient_show
    # 抄送人顯示,不起實際作用
    msg["Cc"] = cc_show
    with SMTP_SSL(host="smtp.exmail.qq.com",port=465) as smtp:
        # 登錄發送郵件服務器
        smtp.login(user = user, password = password)
        # 實際發送、接收郵件配置
        smtp.sendmail(from_addr = user, to_addrs=to_addrs.split(','), msg=msg.as_string())

def work():
    data_dic = {'機型':['小米12','華為P40','IQOO8','iphone13'],'價格':[3999,5000,3899,5999],'顏色':['白色','紫色','金色','白色']}
    # 轉成 datafram 格式
    df = pandas.DataFrame(data_dic)
    # 轉化成 HTML 格式
    df_html = df.to_html()
    Subject = '表格測試'
    sender_show = 'xxx'
    recipient_show = 'xxx'
    to_addrs = 'xxx'
    sendMail(df_html,Subject,sender_show,recipient_show,to_addrs)

if __name__ =='__main__':
    work()

 

 

3、不加修飾的表格有點難看,我們可以通過 CSS 進行樣式修改,如下:

import pandas
from smtplib import SMTP_SSL
from email.mime.text import MIMEText

def sendMail(message,Subject,sender_show,recipient_show,to_addrs,cc_show=''):
    '''
    :param message: str 郵件內容
    :param Subject: str 郵件主題描述
    :param sender_show: str 發件人顯示,不起實際作用如:"xxx"
    :param recipient_show: str 收件人顯示,不起實際作用 多個收件人用','隔開如:"xxx,xxxx"
    :param to_addrs: str 實際收件人
    :param cc_show: str 抄送人顯示,不起實際作用,多個抄送人用','隔開如:"xxx,xxxx"
    '''
    # 填寫真實的發郵件服務器用戶名、密碼
    user = 'root'
    password = '123456'
    # 郵件內容
    msg = MIMEText(message, 'html', _charset="utf-8")
    # 郵件主題描述
    msg["Subject"] = Subject
    # 發件人顯示,不起實際作用
    msg["from"] = sender_show
    # 收件人顯示,不起實際作用
    msg["to"] = recipient_show
    # 抄送人顯示,不起實際作用
    msg["Cc"] = cc_show
    with SMTP_SSL(host="smtp.exmail.qq.com",port=465) as smtp:
        # 登錄發送郵件服務器
        smtp.login(user = user, password = password)
        # 實際發送、接收郵件配置
        smtp.sendmail(from_addr = user, to_addrs=to_addrs.split(','), msg=msg.as_string())

def work():
    data_dic = {'機型':['小米12','華為P40','IQOO8','iphone13'],'價格':[3999,5000,3899,5999],'顏色':['白色','紫色','金色','白色']}
    # 轉成 datafram 格式
    df = pandas.DataFrame(data_dic)
    # 轉化成 HTML 格式
    df_html = df.to_html()
    mail_html =  '''
        <!DOCTYPE html>
        <html lang="en">
            <head>
            <meta charset="utf-8">
            <STYLE TYPE="text/css" MEDIA=screen>

                table.dataframe {
                    border-collapse: collapse;
                    border: 2px solid #a19da2;
                }

                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: #3da014;
                    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: #3da014;
                    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(61, 160, 20, 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 {
                    max-width: 300px;
                    max-height: 300px;
                }

            </STYLE>
        </head>
        <body>

        <h2><b>Hi,本郵件由系統自動發出(每天觸發),無需回復!</b></h2>
        <hr size="1px" noshade=true />
        <p><font color="#0B610B"><b>手機價格清單</b></font></p>
        '''+ df_html +'''
        </body>
        </html>'''
    Subject = '表格測試'
    sender_show = 'xxx'
    recipient_show = 'xxx'
    to_addrs = 'xxx'
    sendMail(mail_html,Subject,sender_show,recipient_show,to_addrs)

if __name__ =='__main__':
    work()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM