سؤال

فيما يلي مثال على المشكلة التي أواجهها.أنا أستخدم ملحقات 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

والرد على سؤالي الخاص. يبدو دليل العمل الخاص بك يحصل تغييرها عند قراءة البريد الإلكتروني. إذا قمت بتعيين مرة أخرى، الملف ط / س يعمل بشكل جيد.

وسيكون البرنامج النصي الصحيح تبدو هذه:

#!/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()

نصائح أخرى

نعم، يعد تغيير الدليل مشكلة معروفة عند استخدام CDO/MAPI.تم "توثيقه" في مكان ما في MSDN (على سبيل المثال http://support.microsoft.com/kb/269170).يمكنك إعادة إنتاجه بسهولة في بايثون مثل هذا:


import os
import win32com.client

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top