【问题标题】:Python script not working after patch upgrade of outlook to win32com.gen_py.Microsoft Outlook 14.0将 Outlook 补丁升级到 win32com.gen_py.Microsoft Outlook 14.0 后 Python 脚本不起作用
【发布时间】:2016-12-31 23:43:26
【问题描述】:

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

但是在将补丁应用到 Outlook 之后,python 2.7 脚本上出现了所有这些错误(自过去 3 年以来一直运行良好)。

完整的错误是 AttributeError: '' object has no attribute 'SaveASFile'

这是代码

消息中的味精:

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

提前致谢。 -摇摆

【问题讨论】:

  • 错误是 AttributeError: '' object has no attribute 'SaveASFile'

标签: python outlook-2010


【解决方案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"

希望这会有所帮助。

【讨论】:

  • 改成驼峰式对我有用。从 ns.createRecipient() 到 ns.CreateRecipient()。但是,动态解决方案没有。
【解决方案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))

它也有效

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多