Python exchangelib:检查项目是否是消息

时间:2018-02-27 16:12:44

标签: python exchangelib

使用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)

1 个答案:

答案 0 :(得分:0)

只需检查退回项目的类别:if type(item) == Message,然后忽略那些不匹配的项目。

如果您想避免错误原因,您还需要在flag课程(以及MeetingRequestMeetingResponse上注册MeetingCancellation媒体资源那些在您的文件夹中。)