繁体   English   中英

监控通过 Python win32.Dispatch('Outlook.Application') 发送的电子邮件?

[英]Monitor E-mail sent via Python win32.Dispatch('Outlook.Application')?

我在使用以下解决方案时遇到了一些麻烦,我创建了一个 function,它通过 Outlook 发送电子邮件,使用 win32 ZEFE90A8E604A7C840E88D03A67F6B7 在其中阻止了 I8D03A67F6B7 工作。 function 本身就像一个魅力:

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 的方式来做到这一点。

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

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

为确保 email 被处理并发送出去,您可以处理Items class 的ItemAdd事件,当一个或多个项目添加到指定集合时会触发它。 默认情况下,Outlook 将已发送项目的副本放入已Sent Items文件夹。 MailItem.SaveSentMessageFolder属性指定了一个Folder object,它表示 email 消息的副本在发送后将保存在其中的文件夹。 因此,您可以查看消息的发送时间。

从外部应用程序使用 Send 方法的另一个方面是安全性。 如果 Outlook object model 引发安全问题,您可能会在Send行上遇到错误。 For example, in Microsoft Outlook 2019, Outlook for Office 365, Outlook 2016, and Outlook 2013, when you send an email message from another program such as Microsoft Excel, you receive the following warning message:

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

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

在 Outlook 文章中的 A 程序试图代表您发送电子邮件警告中阅读有关此内容的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM