Отправка поврежденных файлов по электронной почте Python - PullRequest
0 голосов
/ 10 июля 2019

Я отправляю таблицу Excel в виде вложения, используя этот код:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
def send_email(subject, mail_body, attachment= None):
    to_addr = input("Enter the recipient's email address: ")
    from_addr = 'cloudops@noreply.company.com'
    content = mail_body
    msg = MIMEMultipart()
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Subject'] = subject
    body = MIMEText(content, 'html')
    msg.attach(body)
    server = smtplib.SMTP('smtpout.us.cworld.company.com', 25)
    with open(attachment, 'r') as f:
        part = MIMEApplication(f.read(), Name=basename(attachment))
        part['Content-Disposition'] = 'attachment; filename="{}"'.format(basename(attachment))
        msg.attach(part)
        try:
            server.send_message(msg, from_addr=from_addr, to_addrs=to_addr)
            print(f"Email was sent to: {to_addr}")
        except Exception as e:
            print(f"Exception: {e}")
            print("Email was not sent.")

И когда я открываю файл, я получаю сообщение:

Excel не может открыть файл «Распределение затрат - 201906.xlsx», потому что неверный формат или расширение файла. Убедитесь, что файл не имеет поврежден и что расширение файла соответствует формату файл.

enter image description here

Почему я получаю эту ошибку и как ее исправить?

1 Ответ

1 голос
/ 11 июля 2019

Вы должны открыть файл в режиме bytes

with open(..., 'rb') as f:

В режиме text он преобразует байт, используемый для "new line", и, наконец, отправляет неверные данные.

...