web-dev-qa-db-ja.com

exchangelib-自動検出プロトコルのすべてのステップが失敗しました

Pythonでexchangelibを使用する際に問題が発生しました。このサンプルコードを試してみます:

from exchangelib import DELEGATE, Account, Credentials

creds = Credentials(
    username='xxxx\\username', 
    password="mypassword"
)

account = Account(
    primary_smtp_address='[email protected]',
    credentials=creds, 
    autodiscover=True, 
    access_type=DELEGATE
)

# Print first 10 inbox messages in reverse order
for item in account.inbox.all().order_by('-datetime_received')[:10]:
    print(item.subject, item.body, item.attachments)

別のユーザー名を試しましたが、何も機能せず、常に同じエラーメッセージが表示されます。

AutoDiscoverFailed: All steps in the autodiscover protocol failed

ちなみに、それが役立つ場合に備えて、C#用にコード化されたExchange Webサービスを使用しようとしましたが、この資格情報で完全に機能します。メールを送信できます。

static void Main(string[] args)
{
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
    // The last parameter is the domain name
    service.Credentials = new WebCredentials("username", "password", "xxxx.lan");
    service.AutodiscoverUrl("[email protected]", RedirectionUrlValidationCallback);
    EmailMessage email = new EmailMessage(service);
    email.ToRecipients.Add("[email protected]");
    email.Subject = "salut ";
    email.Body = new MessageBody("corps du message");
    email.Send();
}

private static bool RedirectionUrlValidationCallback(string redirectionUrl)
{
    // The default for the validation callback is to reject the URL.
    bool result = false;

    Uri redirectionUri = new Uri(redirectionUrl);

    /* Validate the contents of the redirection URL. In this simple validation
       callback, the redirection URL is considered valid if it is using HTTPS
       to encrypt the authentication credentials. */
    if (redirectionUri.Scheme == "https")
    {
        result = true;
    }
    return result;
}

前もって感謝します !

8
Elweiss

私はついにこの構成で成功しました:

from exchangelib import DELEGATE, Account, Credentials, Configuration

creds = Credentials(
    username="domain_name\\username", 
    password="password"
)

config = Configuration(server='mail.solutec.fr', credentials=creds)

account = Account(
    primary_smtp_address="my email address",
    autodiscover=False, 
    config=config,
    access_type=DELEGATE
)

同じ問題が発生する場合は、[コンピュータ]と[プロパティ]を右クリックしてdomain_nameを見つけることができます。ユーザー名とパスワードは、たとえば会社のメールボックスに接続するために使用するものです。構成内のサーバーの場合、これは機能します: "mail.solutec.fr".

この自動発見の男は本当に私を好きではないようです^^

とにかくあなたの助けに感謝し、良い一日を!

14
Elweiss