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

标签 python excel oauth-2.0 gmail-api mime

我试图让 python 程序通过 Gmail 发送附件。 我使用了找到的示例代码: Sending email via gmail & python

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

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

最佳答案

有类似的问题。

错误可能是在将文件编码为字节时出现的。

当我确实想发送 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:')

关于python - 通过 Gmail API 发送 Excel 文件但附件已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211869/

相关文章:

python - PyGObject:Gtk.固定 Z 顺序

vba - 圈子无效数据宏

vba - 使用 VBA 隐藏列

oauth-2.0 - 无法再获取 OAuth2 访问 token : invalid_scope error

php - 作为 "Service Account"连接到 Google Sites API

Python QT5无法显示另一个类的消息框

python - 如何在不完全用 Python 重写的情况下在函数内部添加、删除和编辑某些行?

python - 在python中合并具有相同类别的csv文件行

vba - 如何缩短这段特殊的 VBA 代码以使其更小?

python - 有谁知道使用 python 实现谷歌身份验证的任何好的完整资源?