• 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- 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()

  • 相关阅读:
    远程桌面无法复制粘贴
    正则表达式(http://tieba.baidu.com/p/882391125)
    android 2048游戏、kotlin应用、跑马灯、动画源码
    Android扫码二维码、美女瀑布流、知乎网易音乐、动画源码等
    android狼人杀源码,桌面源码,猎豹快切源码
    android文件管理器源码、斗鱼直播源码、企业级erp源码等
    android动画源码合集、动态主题框架、社交app源码等
    android下载管理、理财、浏览器、商品筛选、录音源码等
    android手机安全卫士、Kotlin漫画、支付宝动画、沉浸状态栏等源码
    android企业级商城源码、360°全景图VR源码、全民直播源码等
  • 原文地址:https://www.cnblogs.com/shenh/p/15728284.html
Copyright © 2020-2023  润新知