我目前正在用Python 2.7编写脚本,该脚本在Outlook文件夹中的电子邮件中进行迭代,检索电子邮件发件人并将电子邮件保存到本地计算机上的文件夹中。 但是有一个问题,当发件人撤回电子邮件时,会发生错误并且脚本无法正常工作。这是引起错误的代码:
if message.Class == 43:
if message.SenderEmailType == 'EX':
Sender = message.Sender.GetExchangeUser().PrimarySmtpAddress
else:
Sender = message.SenderEmailAddress
和错误:
如果message.SenderEmailType =='EX':文件 “ C:\ Python27 \ lib \ site-packages \ win32com \ client \ dynamic.py”,第516行, 在 getattr 中ret = self。 oleobj .Invoke(retEntry.dispid,0,invoke_type,1) pywintypes.com_error:(-2147467262,“不支持此类接口”, 无,无)
问题是,我该如何处理发件人撤回电子邮件的对象?我必须跳过它们或将它们移动到其他文件夹,但消息。移动对撤回的电子邮件均无效(相同的错误,不支持这种界面)。
整个代码:
import os
import win32com.client
import itertools
import shutil
OlSaveAsType = {
"olTXT": 0,
"olRTF": 1,
"olTemplate": 2,
"olMSG": 3,
"olDoc": 4,
"olHTML": 5,
"olVCard": 6,
"olVCal": 7,
"olICal": 8
}
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders("MyFolder")
inbox = folder.Folders("Inbox")
Checked = inbox.Folders("Checked")
Sent = inbox.Folders("Sent")
messages = Checked.Items
a = (len(messages))
message = messages.GetFirst()
id = 1
for _ in itertools.repeat(None, a):
messages = Checked.Items
message = messages.GetFirst()
Subject = message.subject
if message.Class == 43:
if message.SenderEmailType == 'EX':
Sender = message.Sender.GetExchangeUser().PrimarySmtpAddress
else:
Sender = message.SenderEmailAddress
message.SaveAs(newpath + '\\' + Sender + " " + str(id) + ".msg", OlSaveAsType['olMSG'])
id = int(id)
id += 1
message.Move(Sent)
if id == 600:
break
message = messages.GetNext()
答案 0 :(得分:0)
一种容易通过的方法是捕获错误,但有特殊之处。我看到有人明确地使用e.excepinfo [错误值的索引]明确捕获了哪个错误代码,但我无法使它正常工作,但这会更好,但可以捕获所有com_errors。
from pywintypes import com_error
try:
for item in inboxMsgs:
print(item)
except com_error:
print('Bad Email Skipped . . .')
input('press enter to continue. . . ')
我遇到了同样的问题,只是忽略了收件箱中的不良消息就可以了。