هل يحظر MS Outlook CDO/MAPI إخراج ملف Python؟
سؤال
فيما يلي مثال على المشكلة التي أواجهها.أنا أستخدم ملحقات 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 ()