Как создать и открыть электронную почту Outlook с помощью Python (но не отправлять)

У меня есть script, который автоматически создает и отправляет электронные письма, отправляет электронные письма с помощью простой функции ниже:

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.send

Но как мне открыть это письмо в окне Outlook, чтобы его можно было вручную отредактировать и отправить?

В идеале мне бы хотелось что-то вроде этого:

def __Emailer(text, subject, recipient, auto=True):
    import win32com.client as win32   

    outlook = win32.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    mail.To = recipient
    mail.Subject = subject
    mail.HtmlBody = text
    if auto:
        mail.send
    else:
        mail.open # or whatever the correct code is

Заранее спасибо

Ответ 1

Вызовите mail.Display(True) вместо mail.send

Ответ 2

TL;DR: используйте mail.Display(False) вместо mail.Display(True)

mail.Display(False) по-прежнему будет отображать окно. Если вы используете mail.Display(True), сценарии останавливаются до закрытия окна. Так что используйте mail.Display(False), это откроет окно, и ваш скрипт на Python перейдет к следующей команде. Также полезно знать, что вы можете использовать mail.save() для сохранения как черновика в папке черновиков.

Посетите https://msdn.microsoft.com/en-us/VBA/Outlook-VBA/articles/mailitem-display-method-outlook, чтобы узнать больше об этом

Ответ 3

Вот еще один вариант сохранения почты на диске:

import webbrowser

mail.SaveAs(Path=save_path)
webbrowser.open(save_path)

Таким образом, почта открывается в развернутом виде.

Ответ 4

Мне нравится решение :) Но я хочу добавить информацию:

Используя решение, это, вероятно, лучший способ добавить почтовый ввод в формате Html для модификации.

Также добавьте файл из рабочего каталога...

#requirements.txt add for py 3 -> pypiwin32

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
    ###

    attachment1 = os.getcwd() +"\\file.ini"

    mail.Attachments.Add(attachment1)

    ###
    mail.Display(True)

MailSubject= "Auto test mail"
MailInput="""
#html code here
"""
MailAdress="[email protected];[email protected]"

Emailer(MailInput, MailSubject, MailAdress ) #that open a new outlook mail even outlook closed.