exchangelib 错误:消息对象没有属性 item_id

exchangelib bug: Message object has no attribute item_id

虽然我很高兴 运行 这个脚本一年中的大部分时间,但我最近升级到 Catalina OSX 并重新安装了 Exchangelib。现在我收到 item_id 错误:

'Message'对象没有属性'item_id'

这是我的代码,我很想知道我做错了什么 TIA ps-请原谅任何复杂的编码...

from exchangelib import DELEGATE, Account, Credentials, Message, \
EWSDateTime, EWSTimeZone, Configuration
from exchangelib.util import PrettyXmlHandler
import logging
logging.basicConfig(level=logging.DEBUG, handlers=[PrettyXmlHandler()]) 
from datetime import datetime, timedelta
import monthdelta as md
import sqlite3 
import pandas as pd
import pm_ews_module as pem 

__DBPATH__ = "/Users/patrickstacey/CODE/JUMPY_CODE/dev/data/test_data_tbase11_002"    
__CONFIGFILE__ =  '/Users/patrickstacey/CODE/JUMPY_CODE/dev/config/jumpyConfig.csv' 
__OUTLOOK_EMAIL__ = 'bspks@lunet.lboro.ac.uk'
_PRIMARY_SMTP_ADDRESS_ = 'bspks@lunet.lboro.ac.uk'
__OUTLOOK_PASSWORD__ = '****'

def connect_to_EWS(__OUTLOOK_EMAIL__, __OUTLOOK_PASSWORD__, _PRIMARY_SMTP_ADDRESS_): 
    creds = Credentials(__OUTLOOK_EMAIL__,__OUTLOOK_PASSWORD__)
    config = Configuration(server='outlook.office365.com/EWS/Exchange.asmx', \
                           credentials=creds)

    return Account(
    primary_smtp_address=_PRIMARY_SMTP_ADDRESS_,
    autodiscover=False, 
    config = config,
    access_type=DELEGATE
    )

last_analysis = pem.determine_start_date_required(__OUTLOOK_EMAIL__) 

if last_analysis == "no records": 
    df = pd.read_csv(__CONFIGFILE__)
    retrodays = df['detail'].where(df['item'] == "demo_user_days_retro").dropna().values
    retrodays = int(retrodays)
    last_analysis = None
    last_analysis = datetime.today() - timedelta(days=retrodays)
    (year,month,day,hour,mins,secs) = pem.unpackDateElements(str(last_analysis))
    tz = EWSTimeZone.timezone('Europe/London')
    last_analysis = tz.localize(EWSDateTime(year, month, day, hour, mins, secs))

account = connect_to_EWS(__OUTLOOK_EMAIL__, __OUTLOOK_PASSWORD__, __OUTLOOK_EMAIL__)

for item in account.inbox.filter(datetime_received__gt=last_analysis):
    if type(item) == Message:
        try:   
            db = sqlite3.connect(__DBPATH__)
            cursor = db.cursor()
            cursor.execute("INSERT INTO escores_log(email, datetime, subject, body, emailtype, pos_threshold, item_id, status, sender) VALUES(?,?,?,?,?,?,?,?,?)", (__OUTLOOK_EMAIL__, str(item.datetime_received), pem.deEmojify(item.subject), item.text_body, "received", 0.5, item.item_id, 0, item.sender.email_address))
            print("Inserted an email from ",item.sender.email_address," about ",item.subject," on ",str(item.datetime_received))
            db.commit()
            db.close()

        except Exception as e: 
            print ("Exception found: "+str(e))
            pass

看起来好像 item_id 现在称为 id。我做了一个有根据的猜测。所以脚本再次运行。期待听到关于此的任何其他意见。谢谢。

item_id 在 1.12.0 版本中被重命名为 id,并最终在 2.0.0 中弃用。请参阅变更日志中的注释:https://github.com/ecederstrand/exchangelib/blob/master/CHANGELOG.md#200