Странная проблема здесь. Я могу преобразовать df в файл xlsx с помощью xlsxwriter и отправить его в виде вложения через учетную запись Gmail. Однако я могу открыть указанное вложение только тогда, когда отправляю его в другую учетную запись Gmail, а не из учетной записи любого другого типа (Yahoo, Hotmail и т. Д. c). Когда я пытаюсь в этих учетных записях, он появляется как пустой файл в TextEdit.
def export_excel(df):
with io.BytesIO() as buffer:
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter(buffer, engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Format with Dollar Sign
money = workbook.add_format({'num_format': '$#,##0'})
# Set the column width and format.
worksheet.set_column('B:B', 35, None)
worksheet.set_column('C:C', 10, None)
worksheet.set_column('D:D', None, money)
worksheet.set_column('E:E', None, money)
worksheet.set_column('F:F', 16, money)
writer.save()
return buffer.getvalue()
msg = MIMEMultipart()
msg['From'] = email
msg['To'] = send_to_email
msg['Subject'] = subject
EXPORTERS = {fname: export_excel}
fname = 'Data.xlsx'
# Attachment?
attachment = MIMEApplication(EXPORTERS[fname](df))
attachment['Content-Disposition'] = 'attachment; filename="{}"'.format(fname)
msg.attach(attachment)
# Attach the message to the MIMEMultipart object
msg.attach(MIMEText(message, 'plain'))
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email, password)
text = msg.as_string() # You now need to convert the MIMEMultipart object to a string to send
server.sendmail(email, send_to_email, text)
server.quit()