使用Pywin32& amp;发送自动电子邮件python脚本中的outlook可以正常工作,但是当通过Windows任务调度程序自动化它时,它不起作用

时间:2014-07-24 06:40:33

标签: python outlook pywin32

我编写了一个python脚本,使用win32com.client.Dispatch("Outlook.Application")通过outlook发送自动电子邮件 如果我自己运行脚本,一切都很好。但如果我通过Window task scheduler运行它,它就不会发送电子邮件。
只是为了检查我是否正确运行脚本我使脚本输出一个随机文本文件,但是有效,但电子邮件没有。为什么?

3 个答案:

答案 0 :(得分:0)

我在构建的Excel应用程序中遇到了同样的问题。在我的故障排除期间执行时,我会得到一个我无法避免的Outlook配置文件对话框。奇怪的是,这个对话框在计划执行期间不会出现。我找到了解决这个问题的方法,那就是使用CDO发送电子邮件。我了解您并未使用VBA,但这可能会指向您发送电子邮件的备用方法(就像我必须做的那样): http://www.rondebruin.nl/win/s1/cdo.htm

注意:当我将安全选项设置为&#34时,我才能获得成功;仅在用户登录时运行" (我在我的机器上拥有完全的管理员权限,并且正在运行具有最高权限)。我有一个强大的 - 但未经证实 - 怀疑在涉及任务计划程序时调用了一些安全设置,至少在公司环境中是这样。

答案 1 :(得分:0)

在发送电子邮件之前,您是否添加了任何附件?我遇到了类似的问题但现在工作得很好。如果我的脚本中有两个不同的函数来发送电子邮件(例如,一个在发生错误时发送电子邮件,另一个在脚本成功运行时发送电子邮件),我会中止'操作中止&# 39;来自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()

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

答案 2 :(得分:0)

我的类似问题已解决。我使用任务计划程序调用具有pywin32com模块的python脚本(通过批处理文件)。 python代码打开excel并调用宏。它可以在python,cmd和批处理文件中正常运行,但是在通过任务计划程序运行时无法正常工作。它可以追溯到以下错误: “ EnsureDispatch disp = win32com.client.Dispatch(prog_id)”

如该线程中所述,我将选项更改为“仅在用户登录时运行”,并且运行成功!

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