#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