使用Pywin32&;发送自动电子邮件;python脚本中的outlook可以正常工作,但通过windows任务调度器自动运行outlook时却无法';行不通

使用Pywin32&;发送自动电子邮件;python脚本中的outlook可以正常工作,但通过windows任务调度器自动运行outlook时却无法';行不通,python,outlook,pywin32,Python,Outlook,Pywin32,我编写了一个python脚本,它使用win32com.client.Dispatch(“Outlook.Application”)通过Outlook发送自动电子邮件。 如果我自己运行脚本,一切都会很好。但是如果我通过窗口的任务调度程序运行它,它不会发送电子邮件。 只是为了检查我是否正确运行脚本,我让脚本输出了一个随机文本文件,这样可以工作,但电子邮件不能。为什么? 我构建的Excel应用程序也有同样的问题。当在我的故障排除过程中执行时,我会得到一个Outlook配置文件对话框,这是我无法回避的。

我编写了一个python脚本,它使用
win32com.client.Dispatch(“Outlook.Application”)
通过Outlook发送自动电子邮件。
如果我自己运行脚本,一切都会很好。但是如果我通过窗口的任务调度程序运行它,它不会发送电子邮件。

只是为了检查我是否正确运行脚本,我让脚本输出了一个随机文本文件,这样可以工作,但电子邮件不能。为什么?

我构建的Excel应用程序也有同样的问题。当在我的故障排除过程中执行时,我会得到一个Outlook配置文件对话框,这是我无法回避的。奇怪的是,这个对话框在计划执行期间不会出现。我找到了一种解决方法,那就是使用CDO发送电子邮件。我知道您没有使用VBA,但这可能会让您找到另一种发送电子邮件的方法(就像我必须做的那样):


注意:只有当我将安全选项设置为“仅当用户登录时运行”时,我才能成功(我对我的计算机拥有完全的管理员权限,并且正在运行,并且拥有最高权限)。我强烈(但未经证实)怀疑,至少在公司环境中,当涉及任务调度器时,会调用某些安全设置。

在发送电子邮件之前是否向电子邮件添加任何附件?我也有过类似的问题,但现在它工作得很好。如果我的脚本中有两个不同的功能来发送电子邮件(例如,一个用于在发生错误时发送电子邮件,另一个用于在脚本成功运行时发送电子邮件),我将从Outlook收到一个“操作中止”错误。这是因为在其中一个功能中,我会向电子邮件添加附件,而在另一个功能中,我不会。不要问我为什么,但这会导致错误。为了解决这个问题,我只需要在电子邮件中添加一个不需要附件的多余附件

def emailComplete():
    ol = DispatchEx("Outlook.Application")
    Msg = ol.CreateItem(0)
    Msg.To = "recip@ient.com"
    Msg.Subject = "foo complete"
    Msg.Attachments.Add("C:\Path\to\blank\attachment.txt") # send a blank attachment to stop the 'operation aborted' error
    Msg.Send()
    ol.Quit()

def emailError():
    ol = DispatchEx("Outlook.Application")
    Msg = ol.CreateItem(0)
    Msg.To = "recip@ient.com"
    Msg.Subject = "foo errored"
    Msg.Attachments.Add("C:\path\to\error\file.txt") # send the error file with the email
    Msg.Send()
    ol.Quit()

这不是最优雅的解决方案,但它让我的工作

我的类似问题已经解决了。我使用任务调度器(通过批处理文件)调用包含pywin32com模块的python脚本。python代码打开excel并调用宏。它可以在python、cmd和批处理文件中正常运行,但在通过任务调度器运行时不起作用。它可以追溯到如下错误: “EnsureRedispatch disp=win32com.client.Dispatch(程序id)”

正如在这个线程中提到的,我将选项更改为“仅当用户登录时运行”,它成功运行了


唯一的缺点是我将任务安排在远离计算机的时间。我想我只是不需要注销,希望cpu不会进入睡眠模式,但在这种情况下这并不是什么大问题

我正在使用所述选项“仅当用户登录时运行”和“以最高权限运行”运行任务。问题是如果我自己操作它,它会工作得很好。我喜欢当前我用来发送电子邮件的pywin32方法,因为它只是在当前工作的outlook环境下发送电子邮件。非常奇怪,但它对我有效。一旦我在电子邮件中添加了附件,我的“操作中止”错误就消失了。一直在寻找解决办法。谢谢