Python 通过电子邮件发送损坏的文件

Python 通过电子邮件发送损坏的文件,python,excel,email,email-attachments,Python,Excel,Email,Email Attachments,我使用以下代码将excel电子表格作为附件发送: import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication def send_email(subject, mail_body, attachment= None): to_addr = input(&

我使用以下代码将excel电子表格作为附件发送:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
def send_email(subject, mail_body, attachment= None):
    to_addr = input("Enter the recipient's email address: ")
    from_addr = 'cloudops@noreply.company.com'
    content = mail_body
    msg = MIMEMultipart()
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Subject'] = subject
    body = MIMEText(content, 'html')
    msg.attach(body)
    server = smtplib.SMTP('smtpout.us.cworld.company.com', 25)
    with open(attachment, 'r') as f:
        part = MIMEApplication(f.read(), Name=basename(attachment))
        part['Content-Disposition'] = 'attachment; filename="{}"'.format(basename(attachment))
        msg.attach(part)
        try:
            server.send_message(msg, from_addr=from_addr, to_addrs=to_addr)
            print(f"Email was sent to: {to_addr}")
        except Exception as e:
            print(f"Exception: {e}")
            print("Email was not sent.")
当我打开文件时,会收到一条信息,上面写着:

Excel无法打开文件“成本分配-201906.xlsx”,因为 文件格式或扩展名无效。请验证该文件是否未被删除 已损坏,并且文件扩展名与 文件

为什么会出现此错误?如何更正此错误?

您必须以字节模式打开文件


在文本模式下,它转换用于新行的字节,最后发送不正确的数据。

您是否尝试查看接收文件的内容以查看其外观?这可能会给你一些线索。Excel不会打开该文件,因为它说该文件已损坏。但是,当我使用Sublime打开文件时,我看到了一组数字:015c 7532 3032 304f 0930 14c3 1420 5248 ca22 5c75 3230 3236 ca22 5c75 3230 3236 b02c 5248 cb22 5c75 3230 3236 b82c fe7b 5ed2 c635 bec0 d0de d8c3 e9f9 f0b8 116d 460f dc5c 7532 3033 39de 5cf6 5c75 3031 3764 B41D 48d0 ecdc 25c8 16F 1eff 29530 3264 Fc 0500 ff030050 4b03 0414 0006 0008 0000 0021 00b5 5530 23f4 0000 004c 02000 000b 0008 025f 7265 6c73 2f2e 7265 6c73 20a2 0402您必须以字节模式打开-打开…,“rb”谢谢!成功了。
with open(..., 'rb') as f: