Не удалось отправить файл excel в виде вложения с помощью MIME на python

#python #email-attachments #mime

#питон #электронная почта-вложения #мим

Вопрос:

Мне трудно понять, почему я не могу отправить рабочий файл excel в качестве вложения. Вложение отображается в электронном письме, однако оно не является расширением .xlsx и не может быть открыто с помощью какого-либо приложения. Я не уверен, что является причиной этого. Вот мой код, использующий python 3.6:

 import pandas as pd import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText  from email.mime.base import MIMEBase from email import encoders  sender='sender@email.com' receivers='receiver@email.com'   #create a dataframe to send in text d={'name':['alex','steve'], 'age':[23,45]} df=pd.DataFrame(data=d)  msg = MIMEMultipart() msg['Subject'] = 'Email Test subject' msg['From'] = sender msg['To'] = receivers  html=''' lt;htmlgt;lt;pgt;******This is an Automated Email******lt;/pgt; lt;h3gt;Updates pending:lt;/h3gt; lt;pgt;Here is your table:lt;/pgt; {0} lt;pgt;lt;p/gt;lt;pgt; More text here.lt;p/gt;lt;/htmlgt; '''.format(df.to_html())  msgText = MIMEText(html,'html') msg.attach(msgText)  file = r'C:UsersaloDesktopPython_ScriptsExcelexcel_file.xlsx'  part = MIMEBase('application', 'octet-stream') part.set_payload(open(file, "rb").read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename=file') msg.attach(part)  try:  with smtplib.SMTP('smtp.gmail.com', 587) as smtpObj:  smtpObj.sendmail(sender, receivers, msg.as_string()) except Exception as e:  print(e)  

Электронная почта работает, текст в электронном письме хорошо выглядит с df в нем, вложение находится в электронном письме, но его нельзя открыть, это не файл .xlsx. Любая помощь была бы очень признательна. Спасибо.

Комментарии:

1. возможно, есть какие-то проблемы с безопасностью, сначала вы можете попробовать отправить файл без кода и использовать простую электронную почту. если это работает, то сначала попробуйте архивировать файл, а затем отправьте электронное письмо, используя свой код.

2. Привет да, это действительно работает, когда я использую smtp. Я понимаю проблему, когда представляю MIME