MS Outlook CDO / MAPI阻止Python文件输出?

时间:2009-01-28 17:19:57

标签: python winapi outlook mapi

以下是我遇到的问题的一个示例。我正在使用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)

2 个答案:

答案 0 :(得分:1)

回答我自己的问题。当您阅读电子邮件时,看起来您的工作目录会发生变化。如果你把它设置回去,你的文件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()

答案 1 :(得分: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 ()