Прикрепить файл как объект к электронной почте Python 3

Я нашел много примеров в сети, как прикрепить локальные файлы к электронной почте. То, что я хочу сделать, это прикрепить файл как объект к электронной почте. Почему ты спрашиваешь? так что мне не нужно заниматься очисткой файлов. Ниже мой код и моя ошибка. После долгих поисков мне все еще не удалось заставить его работать, любая помощь будет принята с благодарностью:)

def email_sup_teams(team_name, contact_list, file_attachemnt):
    message_list = []
    for jobs in file_attachemnt:
        for k, v in jobs.items():
            message_list.append(v + ',')
    attachment_text = "\n".join(message_list)
    print(type(attachment_text))

    msg = MIMEText(' Failed jobs list. Please see attachment')
    msg['Subject'] = 'Not run Jobs for ' + team_name
    msg['From'] = 'a@b.com'
    msg['To'] = 'c@d.com'

    f = io.StringIO(attachment_text)
    attachment = MIMEText(f.read())
    attachment.add_header('Content-Disposition', 'attachment', filename='test_attach')           
    msg.attach(attachment)

    s = smtplib.SMTP('smlsmtp')
    s.sendmail(msg['From'], msg['To'], msg.as_string())
    s.quit()
    print('\n' + team_name + ' Email Sent')

ошибка:

<class 'str'>
Traceback (most recent call last):
  File "queue_cleaner_main.py", line 85, in <module>
    sys.exit(main())
  File "queue_cleaner_main.py", line 82, in main
    queue_cleaner_functions.email_sup_teams(t, team_members_emails, attachment_file_of_jobs)
  File "D:\oppssup\old_job\queue_cleaner_functions.py", line 179, in email_sup_teams
    msg.attach(attachment)
  File "C:\Python34\lib\email\mime\nonmultipart.py", line 22, in attach
    'Cannot attach additional subparts to non-multipart/*')
email.errors.MultipartConversionError: Cannot attach additional subparts to non-multipart/*

1 ответ

Решение

Оказывается, я должен был прочитать

Примеры электронной почты из документов Python

ближе. Я уверен, что это потому, что я использовал только один объект MIME-типа для создания своей электронной почты, но пытался добавить несколько MIME-объектов. В основном, чтобы заставить его работать, я использовал следующий код. Счастливые дни!

def email_sup_teams(team_name, contact_list, file_attachemnt):
    message_list = []
    for jobs in file_attachemnt:
        for k, v in jobs.items():
            message_list.append(v + ',')
    attachment_text = "\n".join(message_list)
    print(type(attachment_text))
    # Create the container (outer) email message.
    msg = MIMEMultipart()
    #msg = MIMEText(' Failed jobs list. Please see attachment')
    msg['Subject'] = 'Not run Jobs for ' + team_name
    msg['From'] = 'a@b.com'
    msg['To'] = 'c@d.com'
    msg.preamble = 'Failed jobs list. Please see attachment'
    f = io.StringIO(attachment_text)
    attachment = MIMEText(f.getvalue())
    attachment.add_header('Content-Disposition', 'attachment', filename='jobs_not_run.xls')           
    msg.attach(attachment)

    s = smtplib.SMTP('smlsmtp')
    s.sendmail(msg['From'], msg['To'], msg.as_string())
    s.quit()
    print('\n' + team_name + ' Email Sent')
Другие вопросы по тегам