【问题标题】:Monitor E-mail sent via Python win32.Dispatch('Outlook.Application')?监控通过 Python win32.Dispatch('Outlook.Application') 发送的电子邮件?
【发布时间】:2021-05-21 15:02:57
【问题描述】:

我在使用以下解决方案时遇到了一些麻烦,我创建了一个通过 Outlook 发送电子邮件的函数,使用 win32 包,导致 smtblib 在我工作的地方被阻止。该函数本身就像一个魅力:

def sendEmail(emailTo, emailCC, emailSubject, emailAttach, emailBody):
    for item in psutil.pids():
        if psutil.pid_exists(item):
            p = psutil.Process(item)
            if p.name() == 'OUTLOOK.EXE':
                os.system('taskkill /f /im OUTLOOK.EXE')
                break
            
    outlook = win32.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    mail.Subject = emailSubject
    mail.To = emailTo
    mail.CC = emailCC
    #mail.Body = emailBody
    mail.HTMLBody = emailBody
    if not emailAttach:
        print('No Attachements...\n')
    else:
        print('Attaching files...\n')
        for i in range(0, len(emailAttach)):
            mail.Attachments.Add(emailAttach[i])
    mail.Send()
    time.sleep(30)

这里的问题是,有时我们需要在 for 循环中向不同的人发送多封不同的电子邮件,但是由于代码比电子邮件创建速度更快,有时它会失败,我想知道是否有我监控电子邮件是否完成的方法,据我所知,在任务栏上,它在创建和发送电子邮件时打开带有齿轮的 Outlook。这里的要点是我是否有办法监控电子邮件何时创建并确实发送给我以继续下一个项目。

我强制等待 30 秒睡眠,但我确信有更好、更 Python 的方式来做到这一点。

【问题讨论】:

    标签: python email winapi outlook smtplib


    【解决方案1】:

    电子邮件提交本质上是异步的。即使 Outlook 成功发送了邮件,也有可能目标邮箱不再存在,您有时会在数小时后收到 NDR。

    如果MailItem.Send 没有出错,这是您能做的最好的事情。

    【讨论】:

      【解决方案2】:

      为确保电子邮件得到处理和发送,您可以处理Items 类的ItemAdd 事件,当一个或多个项目添加到指定集合时会触发它。默认情况下,Outlook 将已发送项目的副本放入Sent Items 文件夹。 MailItem.SaveSentMessageFolder 属性指定一个 Folder 对象,该对象表示发送后将保存电子邮件副本的文件夹。因此,您可以查看消息的发送时间。

      从外部应用程序使用 Send 方法的另一个方面是安全性。如果 Outlook 对象模型引发安全问题,您可能会在 Send 行中遇到错误。例如,在 Microsoft Outlook 2019、Outlook for Office 365、Outlook 2016 和 Outlook 2013 中,当您从 Microsoft Excel 等其他程序发送电子邮件时,您会收到以下警告消息:

      一个程序正试图代表您发送一封电子邮件。如果这是意外情况,请单击拒绝并确认您的防病毒软件是最新的。

      但也有机会在运行时在Send 行上获得异常。很可能就是这样!

      A program is trying to send an e-mail message on your behalf warning in Outlook 文章中了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 2016-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-13
        相关资源
        最近更新 更多