1

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

4

2 回答 2

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()
于 2009-01-28T21:12:38.007 回答
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 ()

于 2009-01-29T11:15:22.607 回答