Python добавление вложения в электронное письмо из функции - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь автоматизировать отправку вложений и сообщений электронной почты из Python:

def Emailer(text, subject, recipient):
    import win32com.client as win32   
    outlook = win32.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    mail.To = recipient
    mail.Subject = subject
    mail.HtmlBody = text
    mail.Display(True)
    attachment = 'C:/Users/.../file.pdf'
    mail.Attachments.Add(attachment)

Emailer('text', 'test', 'name@mail.com')

Однако это не добавляет вложение. Путь должен быть правильным, потому что когда я пытаюсь ниже, это работает:

import win32com.client as win32
mail = win32.Dispatch('outlook.application').CreateItem(0)
mail.To = 'name@mail.com'
mail.Subject = 'test'
mail.HTMLBody = 'text'

attachment  = 'C:/Users/.../file.pdf'
mail.Attachments.Add(attachment)
mail.Display(True)

Кто-нибудь знает, что я делаю не так с моим Emailer()

1 Ответ

1 голос
/ 02 апреля 2019

В Emailer вы вызываете MailItem.Display(True) перед добавлением вложения, тогда как в «рабочем» фрагменте вы делаете это после. Согласно официальной документации Display(True) создает модальное окно, это также может быть блокирующий вызов, означающий, что Emailer перестанет работать, пока вы не закроете окно.

Я бы предложил переместить вызов на Display после добавления вложения или, возможно, попробовать открыть немодальное окно.

Между прочим, согласно документу, указанному выше, отображение устарело.

...