使用exchangelib检索项目时出错。是否有任何方法来检测该项目是否是电子邮件,如果没有,只是忽略它?以下代码引发AttributeError: 'MeetingRequest' object has no attribute 'flag')
,因为会议请求没有flag
字段。或者有没有方法来查看项目的类型?
import re
import sys
from exchangelib import DELEGATE, IMPERSONATION, Account, Credentials, ServiceAccount, \
EWSDateTime, EWSTimeZone, Configuration, NTLM, CalendarItem, Message, \
Mailbox, Attendee, Q, ExtendedProperty, FileAttachment, ItemAttachment, \
HTMLBody, Build, Version
from datetime import datetime, timedelta
import pytz
tz = EWSTimeZone.timezone('Asia/Hong_Kong')
creds = Credentials(
username='domain\userID',
password='password')
)
account = Account(
primary_smtp_address='myemail@domain',
credentials=creds,
autodiscover=True,
access_type=DELEGATE)
class Flag(ExtendedProperty):
property_tag = 0x1090
property_type = 'Integer'
Message.register('flag', Flag)
if(len(sys.argv) == 1):
yesterday = tz.localize(EWSDateTime.now() - timedelta(days=3))
today = tz.localize(EWSDateTime.now())
fYear= yesterday.year
fMonth= yesterday.month
fDay= yesterday.day
tYear = today.year
tMonth = today.month
tDay = today.day
elif(len(sys.argv) == 3):
fromDate = sys.argv[1]
toDate = sys.argv[2]
fYear = fromDate[:4]
fMonth = fromDate[4:6]
fDay = fromDate[-2:]
tYear = toDate[:4]
tMonth = toDate[4:6]
tDay = toDate[-2:]
for item in account.inbox.filter(datetime_received__range=(
#tz.localize(EWSDateTime.now() - timedelta(days=1)),
#tz.localize(EWSDateTime.now())
tz.localize(EWSDateTime(int(fYear), int(fMonth), int(fDay))),
tz.localize(EWSDateTime(int(tYear), int(tMonth), int(tDay)))
)):
subA=item.subject
snd=item.sender.email_address
fg=str(item.flag)
str(item.datetime_received.astimezone(pytz.timezone('Asia/Hong_Kong')).strftime("%a %b %d %H:%M:%S %Y"))
rT = str(item.datetime_received.astimezone(pytz.timezone('Asia/Hong_Kong')).strftime("%Y-%m-%d %H:%M:%S"))
cat=str(item.categories)
if not subA:
subA=""
a="\"Inbox\",\""+snd+"\",\""+subA+"\",\""+rT+"\",\""+cat+"\",\""+fg+"\""
print(a)
else:
subA = re.sub('\"\,\"', '\\"\,\\"', subA.rstrip())
a="\"Inbox\",\""+snd+"\",\""+subA+"\",\""+rT+"\",\""+cat+"\",\""+fg+"\""
decoded = a.encode('utf-8').decode('utf-8')
print(decoded)
答案 0 :(得分:0)
只需检查退回项目的类别:if type(item) == Message
,然后忽略那些不匹配的项目。
如果您想避免错误原因,您还需要在flag
课程(以及MeetingRequest
和MeetingResponse
上注册MeetingCancellation
媒体资源那些在您的文件夹中。)