将补丁升级到Outlook后,Python脚本无法运行到win32com.gen_py.Microsoft Outlook 14.0

时间:2016-08-24 17:58:42

标签: python outlook-2010

我很少有python脚本与Microsoft Outlook 2010交互而没有任何问题。

但是在将补丁应用于outlook后,在python 2.7脚本上获得了所有这些错误(自从过去3年以来运行良好)。

完整的错误是 AttributeError:''对象没有属性'SaveASFile'

这是代码

邮件中的msg

  attachments = msg.Attachments
  attachment = attachments.Item(1)      
  attachment.SaveASFile(os.path.join('c:\\EDIT', 'outlookAttach.txt'))

提前致谢。 -Sway

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我将属性名称从“SaveASFile”

更改为“SaveAsFile”

我知道这很有趣。但是,它对我有用!

还要确保指定要下载的附件类型。在您的情况下,附件为txt类型。

这是我的代码:

att=msg.Attachments
attachment = att.Item(1)
attachment.SaveAsFile(os.path.join('C:\Users\Harish\Desktop', 'outlookAttach.msg'))

在我的情况下,附件是和eml文件。所以,它工作正常。

或者,你可以这样做:

attachment.SaveAsFile(os.path.join('C:\Users\Harish\Desktop', attachment.FileName))

它也有效

希望有所帮助

答案 1 :(得分:1)

此属性错误的主要原因是因为您的COM服务器已从后期绑定(动态)更改为早期绑定(静态)。

  • 在后期绑定中,每当调用一个方法时,都会向该对象查询该方法,如果成功,则可以进行调用。
  • 在“早期绑定”中,对象模型的信息是根据对象调用提供的类型信息预先确定的。早期绑定会使用MakePy。同样,早期绑定也区分大小写。

有两种方法可以解决此问题:

  1. 使用动态模块来强制您的代码以面向后期的方式工作。使用示例:

    "win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()" 
    
  2. 使用面向驼峰的敏感关键字作为面向早期绑定的方式。使用示例:

    "excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"
    

在您的情况下,正如他所说的那样使用:

"attachment.SaveAsFile" instead of "attachment.SaveASFile"

希望这会有所帮助。