代码之家  ›  专栏  ›  技术社区  ›  Jack

将df作为附件发送电子邮件

  •  0
  • Jack  · 技术社区  · 6 年前

    我想以excel.xlsx附件的形式通过电子邮件发送熊猫数据框。如果我将df保存为Excel文档, df.to_excel() ,我可以创建附件 attachment = "C:\\Users\\ME\\Documents\\df.xlsx" . 但是,我希望能够将df作为.xlsx发送,而不首先保存它。谢谢!

    import win32com.client as win32
    df = pd.DataFrame([1,2])
    
    mail = outlook.CreateItem(0)
    mail.To = 'recipient@gmail.com'
    mail.Subject = 'See Attachment'
    mail.HTMLBody = 'See Attachment'
    attachment  = df.to_excel()
    mail.Attachments.Add(attachment)
    mail.Send()
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   David Zemens    6 年前

    我认为这是不可能的 win32com . 展望 Attachments.Add method 需要文件或Outlook项目作为 Source 参数:

    附件的源。这可以是文件(由具有文件名的完整文件系统路径表示)或构成附件的Outlook项。

    以及 pandas.ExcelWriter 还需要 path although this other similar question (and answer) 建议通过包装 ExcelWriter 在一个 BytesIO 通过电子邮件发送,而不是通过Outlook发送:

    def export_excel(df):
      with io.BytesIO() as buffer:
        writer = pd.ExcelWriter(buffer)
        df.to_excel(writer)
        writer.save()
        return buffer.getvalue()
    

    但这似乎不适用于Outlook API(刚刚测试过):

    >>> attachment  = export_excel(df)
    >>> mail.Attachments.Add(attachment)
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<COMObject <unknown>>", line 3, in Add
    pywintypes.com_error: (-2147024809, 'The parameter is incorrect.', None, None)