我试图让python程序通过Gmail发送附件。 我使用了找到的示例代码: Sending email via gmail & python
问题是当我将.xls,.xlsx,.xlsm等Excel文件发送给自己时,即使原始文件正常,我也无法打开附件,因为它们已损坏。但发送.csv工作正常。整个过程不会弹出任何警告或错误。
问题是:oauth2.0或Gmail或MIME是否搞砸了某些格式的附件?如何在不修改程序的情况下告诉程序上传和发送附件?
答案 0 :(得分:4)
有类似的问题。
错误可能是将文件编码为字节。
当我确实想发送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:')