Не удается открыть вложения в клиентах NON Gmail, отправленных через smtplib - PullRequest
0 голосов
/ 02 мая 2020

Странная проблема здесь. Я могу преобразовать 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()


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...