一、發送郵件
若還不知道如何使用 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()

