从 python 脚本发送时,Outlook 中的电子邮件附件名称始终为“AT00001.xlsx”而不是实际名称

Posted

技术标签:

【中文标题】从 python 脚本发送时,Outlook 中的电子邮件附件名称始终为“AT00001.xlsx”而不是实际名称【英文标题】:Email attachment name in outlook always "AT00001.xlsx" instead of actual name when sent from python script 【发布时间】:2020-11-13 08:26:00 【问题描述】:

我正在尝试发送一封带有 python 脚本附件的电子邮件。电子邮件到达我的收件箱,附件中包含所有正确的收件人、主题、正文和数据

问题是附件文件名总是“AT00001.xlsx”而不是脚本中的文件名。

这是我用来发送电子邮件的方法:

def send_email():

    msg = MIMEMultipart()

    message = "Here is your file"

    msg['From'] = MY_ADDRESS
    msg['To'] = MY_ADDRESS
    msg['Subject'] = "File extract"
    msg.attach(MIMEText(message))

    attach_file_name = "test.xlsx"
    attach_file = open(attach_file_name, "rb")

    payload = MIMEBase('application', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    payload.set_payload(attach_file.read())

    attach_file.close()
    encoders.encode_base64(payload)

    payload.add_header('Content-Decomposition', 'attachment', filename=attach_file_name)
    msg.attach(payload)

    s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)
    s.starttls()
    s.login(MY_ADDRESS, PASSWORD)

    s.sendmail(MY_ADDRESS, MY_ADDRESS, msg.as_string())
    s.quit()

我在各种网站上发现了描述由于附件和文本乱序而发生的此问题的帖子。我验证了附件是电子邮件有效负载中的最后一个,所以我认为这不是造成它的原因。

【问题讨论】:

您的标题名称错误:“Content-Decomposition”应为“Content-Disposition”。 这样就解决了。我不敢相信我忽略了这一点。非常感谢! 【参考方案1】:

正如rfkortekaas 在他的评论中指出的那样,这个问题的原因是我使用的是“Content-Decomposition”而不是“Content-Disposition”。

我更新了这行代码,效果很好:

payload.add_header('Content-Disposition', 'attachment', filename=attach_file_name)

【讨论】:

以上是关于从 python 脚本发送时,Outlook 中的电子邮件附件名称始终为“AT00001.xlsx”而不是实际名称的主要内容,如果未能解决你的问题,请参考以下文章

通过 python 发送时附件不显示在 Outlook 中

使用 Python 从 Outlook 发送电子邮件不起作用

Python Outlook发送邮件

将数据从 Excel 导入 Outlook 时如何设置固定列宽?

把excel文件用outlook发送时,还要再打开outlook中点击“发送接受”按钮才能发送,能否直接从excel中发送

在 html 中嵌入图像以自动发送 Outlook365 电子邮件