exchangelib - 自动发现协议中的所有步骤都失败了

时间:2017-10-02 11:59:43

标签: python protocols exchangelib

我在python中使用exchangelib时遇到问题。我尝试这个示例代码:

from exchangelib import DELEGATE, Account, Credentials
creds = Credentials(
username='xxxx\\username', 
password="mypassword")
account = Account(
primary_smtp_address='surname.name@xxxx.fr',
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);
        service.Credentials = new WebCredentials("username","password","xxxx.lan"); #The last parameter is the domain name
        service.AutodiscoverUrl("surname.name@xxxx.fr", RedirectionUrlValidationCallback);
        EmailMessage email = new EmailMessage(service);
        email.ToRecipients.Add("surname.name@xxxx.fr");
        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;
    }

}

提前致谢!

1 个答案:

答案 0 :(得分:7)

我终于成功完成了这个配置:

from exchangelib import DELEGATE, IMPERSONATION, Account, Credentials, ServiceAccount, \
EWSDateTime, EWSTimeZone, Configuration, NTLM, CalendarItem, Message, \
Mailbox, Attendee, Q, ExtendedProperty, FileAttachment, ItemAttachment, \
HTMLBody, Build, Version

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。 例如,用户名和密码是用于连接到公司邮箱的用户名和密码。对于Configuration中的服务器,对我来说这个工作:“mail.solutec.fr”,其中solutec是我公司的名称,fr是法国的。

看起来这个自动发现的家伙真的不喜欢我^^

感谢您的帮助,祝您有个美好的一天!