【问题标题】:MS Outlook CDO/MAPI Blocking Python File Output?MS Outlook CDO/MAPI 阻止 Python 文件输出?
【发布时间】:2009-01-28 17:19:56
【问题描述】:

这是我遇到的问题的一个示例。我正在使用 Python Win32 扩展来访问 Outlook 邮箱并检索邮件。

下面是一个应该将“hello world”写入文本文件的脚本。我需要从 Outlook 邮箱中获取一些消息,但我发现了一些奇怪的东西。附加到邮箱一次后,我无法再将任何内容打印到文件中。这是一个显示问题的精简版本:

#!/usr/bin/env python

from win32com.client import Dispatch

fh = open('foo.txt', 'w')
fh.write('hello ')
fh.close()

session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nprodreport');
session.Logoff()

fh = open('foo.txt', 'a')
fh.write('world')
fh.close()

如果我不附加到邮箱并注释掉以下行,它显然可以正常工作:

session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\ncorey');
session.Logoff()

为什么在我的脚本中间打开与邮箱的会话会阻止进一步的文件输出?有任何想法吗? (其他操作不被阻塞,只是这个文件i/o asfaik)

【问题讨论】:

    标签: python winapi outlook mapi


    【解决方案1】:

    是的,在使用 CDO/MAPI 时,目录更改是一个已知问题。它在 MSDN 的某处“记录”(例如http://support.microsoft.com/kb/269170)。您可以像这样在 Python 中轻松重现它:

    import os import win32com.client print os.getcwd () win32com.client.Dispatch ("MAPI.Session") print os.getcwd ()

    【讨论】:

      【解决方案2】:

      回答我自己的问题。当您阅读电子邮件时,您的工作目录似乎发生了变化。如果你重新设置它,你的文件 i/o 工作正常。

      正确的脚本如下所示:

      #!/usr/bin/env python
      
      import os
      from win32com.client import Dispatch
      
      fh = open('foo.txt', 'w')
      fh.write('hello ')
      fh.close()
      
      cwd = os.getcwd()
      
      session = Dispatch('MAPI.session')
      session.Logon('','',0,1,0,0,'exchange.foo.com\ncorey');
      session.Logoff()
      
      os.chdir(cwd)
      
      fh = open('foo.txt', 'a')
      fh.write('world')
      fh.close()
      

      【讨论】:

        猜你喜欢
        • 2018-01-11
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多