如何使用Python生成和打开Outlook电子邮件(但不发送)

时间:2014-01-06 18:11:02

标签: python email outlook

我有一个脚本,可以使用下面的简单功能自动创建和发送电子邮件发送电子邮件:

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

提前致谢

4 个答案:

答案 0 :(得分:18)

致电mail.Display(True)而非mail.send

答案 1 :(得分:1)

tldr:使用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,详细了解

答案 2 :(得分:1)

这里是将邮件首先保存到磁盘上的另一种选择:

import webbrowser

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

通过这种方式,邮件可以最大化打开。

答案 3 :(得分:1)

我喜欢该解决方案:)但我想添加一些信息:

使用该解决方案,可能是添加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="person1@gmail.com;person2@corp1.com"

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