Как мне использовать exchangelib для подключения к рабочей электронной почте, использующей Outlook Web App (OWA)?

#python #python-3.x #email #exchangewebservices #exchangelib

#python #python-3.x #Адрес электронной почты #exchangewebservices #exchangelib

Вопрос:

В настоящее время я пытаюсь найти способы подключения к моей рабочей электронной почте через язык, и у python, похоже, есть библиотека, которую я ищу. Я нашел библиотеку exchangelib, но она немного старше, и я не смог найти ничего другого для подключения к серверу Exchange (моя рабочая электронная почта не «@outlook.com «).

Я нашел свое имя пользователя («WORD username»), и я знаю свой адрес электронной почты, пароль и URL-адрес электронной почты Outlook web app («www.company.net «)

 from exchangelib import Account, Configuration, Credentials, DELEGATE, Folder


def connect(SERVER, EMAIL, USERNAME, PASSWORD):
    """
    Get Exchange account cconnection with server
    """
    creds = Credentials(username=USERNAME, password=PASSWORD)
    config = Configuration(server=SERVER, credentials=creds)
    account = Account(primary_smtp_address=EMAIL,  config=config, autodiscover=False, access_type=DELEGATE)

    for item in account.inbox.all().order_by('-datetime_received')[:2]:
        print(item.subject, item.body, item.attachments)


def main():

    print(connect("www.company.net",
                  "my@email.net", "WORD\username", "password"))
  

Предполагается, что это просто печатает мои электронные письма, но я не могу подключиться, потому что хост не отвечает

 Failed to create cached protocol with key ('https://www.company.net/EWS/Exchange.asmx', Credentials('WORD\username', '********')): HTTPSConnectionPool(host='www.company.net', port=443): Max retries exceeded with url: /EWS/Exchange.asmx (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000169BAF68FD0>: Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond'))

  

Я попытался использовать полный URL-адрес для своего электронного письма OWA и вместо этого использовал параметр exchangelib service_endpoint

 def connect(SERVER, EMAIL, USERNAME, PASSWORD):
    """
    Get Exchange account cconnection with server
    """
    creds = Credentials(username=USERNAME, password=PASSWORD)
    config = Configuration(service_endpoint=SERVER, credentials=creds)
    account = Account(primary_smtp_address=EMAIL,  config=config, autodiscover=False, access_type=DELEGATE)

    for item in account.inbox.all().order_by('-datetime_received')[:2]:
        print(item.subject, item.body, item.attachments)
  

но не удается получить тип авторизации

 Failed to create cached protocol with key ('https://company.net/.../.../', Credentials('WORD\username', '********')): Failed to get auth type from service
  

Я чего-то не понимаю? Может ли это быть из-за функции безопасности на стороне моей компании? Я не уверен, как это сделать правильно.

Ответ №1:

exchangelib использует EWS для подключения к серверу Exchange. OWA — это просто веб-клиент для Exchange. Вы не можете подключиться к нему программно. Тем не менее, вполне возможно, что на вашем сервере есть конечная точка EWS, к которой вы можете подключиться.

Вам необходимо либо включить автообнаружение, чтобы автоматически находить конечную точку EWS, либо попросить администраторов сервера Exchange указать правильную конечную точку для EWS.