通过Gmail API发送Excel文件,但附件已损坏

cxw*_*xwf 3 python excel mime oauth-2.0 gmail-api

我试图让python程序通过Gmail发送附件。我使用发现的示例代码: 通过gmail和python发送电子邮件

问题是,当我向自己发送.xls,.xlsx,.xlsm之类的Excel文件时,即使原始文件没问题,我也无法打开附件,因为它们已损坏。但是发送.csv可以正常工作。整个过程不会弹出任何警告或错误。

问题是:oauth2.0或Gmail或MIME是否将某些格式的附件弄乱了?以及如何在不修改程序的情况下告诉程序上传和发送附件?

小智 5

有类似的问题。

错误可能是在将文件编码为字节中。

当我确实要发送时xlsx,我的gmail仍然发送损坏的文件,但是我设法获得了xls格式正确的电子邮件。

这是我的代码:

def create_message_with_excel_attachment(sender, to, subject, message_text, file):

    message = MIMEMultipart()
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject

    msg = MIMEText(message_text)
    message.attach(msg)

    part = MIMEBase('application', "vnd.ms-excel")
    part.set_payload(open(file, "rb").read())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment', filename=file)
    message.attach(part)

    raw = base64.urlsafe_b64encode(message.as_bytes())
    raw = raw.decode()
    return {'raw': raw}


def send_message(service, user_id, message):
    message = (service.users().messages().send(userId=user_id, body=message).execute())
    try:

        print ('Message Id: %s' % message['id'])
        return message
    except:
        print ('An error occurred:')
Run Code Online (Sandbox Code Playgroud)