【问题标题】:Python- SMTP customized mail body including Dataframe table and plain textPython- SMTP 自定义邮件正文,包括 Dataframe 表和纯文本
【发布时间】:2020-10-30 18:47:13
【问题描述】:

Python- SMTP 自定义邮件正文,包括 Dataframe 表和纯文本: 我希望发送一封邮件,邮件正文由纯文本组成,例如 “亲爱的用户, 以下是 KPI 详细信息:

数据框表

当我尝试发送时,我将表格作为附件。

【问题讨论】:

    标签: python smtp


    【解决方案1】:

    我缺少一些上下文,所以我假设“Dataframe”是指pandas DataFrame,并且您使用的是Python 的内置smtplib

    以下示例发送正文中包含 Pandas 数据框的电子邮件:

    import pandas as pd
    import html
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    
    
    def send_email(msg_body):
        # The following block is inspired by Todor Minakov's answer in https://stackoverflow.com/a/33121151/13891613
        sender = "someemailaddress@somehost.someprefix"
        receiver = "someotheremailaddress@someotherhost.someprefix"
        msg = MIMEMultipart('alternative')
        msg['Subject'] = "Alert"
        msg['From'] = sender
        msg['To'] = receiver
        msg_body = html.escape(msg_body)
        message_html = f'<html><body><pre>{msg_body}</pre></body></html>'
        part2 = MIMEText(message_html, 'html')
        msg.attach(part2)
        # Send the message via gmail's regular server, over SSL - passwords are being sent, afterall
        s = smtplib.SMTP_SSL('smtp.gmail.com')
        # do the smtp auth; sends ehlo if it hasn't been sent already
        s.login(sender, password=input("Type your password:\n"))
        s.sendmail(sender, receiver, msg.as_string())
        s.quit()
    
    
    if __name__ == '__main__':
        # Create an example pandas dataframe
        data = {'Column A': ['Some value', 'Some value2', 'Some value3'],
                'Column B': ['Some value', 'Some value2', 'Some value3'],
                'Column C': ['Some value', 'Some value2', 'Some value3'],
                }
        df = pd.DataFrame (data, columns = ['Column A','Column B', 'Column C'])
        
        # Send the dataframe in an email using smtplib
        message = f"Dear User, Below are KPI detail:\n\n{df.to_string()}"
        send_email(message) 
    

    上述脚本在我的 gmail 帐户中产生了以下消息(在针对 gmail 帐户对我的机器进行身份验证之后):

    如果“Dataframe”的意思与 pandas DataFrame 不同,那么您可以简单地将数据框对象序列化为字符串,并将其传递到消息正文中,类似于在脚本中的处理方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2023-03-11
      • 2015-11-05
      • 2018-02-17
      • 2013-06-10
      • 2023-04-07
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多