Datafram 实现作为正文发送邮件
Posted 乱糟糟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
以上是关于Datafram 实现作为正文发送邮件的主要内容,如果未能解决你的问题,请参考以下文章
HTML 电子邮件正文是不是可以引用作为附件发送的文件(在同一封电子邮件中)?