Outlook SMTP Oauth Send - аутентификация не удалась - PullRequest
1 голос
/ 26 мая 2020

Я пытался реализовать функцию электронной почты в устаревшем приложении, используя Legacy Mail API , чтобы добавить поддержку OAuth после получения токена через поток кода устройства , начиная с Пример проекта Microsoft .

Вдоль этого маршрута я добавил SMTP.Send и многие другие разрешения API, чтобы найти недостающий фрагмент. (Включая { "User.Read", "User.ReadBasic.All", "SMTP.Send", "offline_access", "Mail.Send" } из-за страха пропустить один)

Я тестировал библиотеку MailKit , чтобы создать доказательство концепции.

Пока что у меня есть следующее Фрагмент кода, который завершился ошибкой после попытки аутентификации.

public void SendSmtpMessageAsync(string id, string accessToken)
{
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("From Name", "From Address@Example.com"));
    message.To.Add(new MailboxAddress("To Name", "To Address@Example.com"));
    message.Subject = "How you doin'?";

    message.Body = new TextPart("plain")
    {
        Text = @"Test Email Content"
    };

    using (var client = new SmtpClient(new ProtocolLogger(Console.OpenStandardOutput())))
    {
        try
        {
            client.Connect("smtp.office365.com", 587, SecureSocketOptions.StartTls);

            var oauth2 = new SaslMechanismOAuth2(id, accessToken);

            var temp = client.AuthenticationMechanisms;
            client.Authenticate(oauth2);

            client.Send(message);
            client.Disconnect(true);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
}

Журнал MailKit

Я включил ведение журнала и получил журнал, который показывает, что клиент подключается, а не отправляет токен для аутентификации, но аутентификация не выполняется.

Connected to smtp://smtp.office365.com:587/?starttls=always
S: 220 MW3PR05CA0003.outlook.office365.com Microsoft ESMTP MAIL Service ready at Mon, 25 May 2020 21:31:07 +0000
C: EHLO [192.168.0.7]
S: 250-MW3PR05CA0003.outlook.office365.com Hello [<<My IP>>]
S: 250-SIZE 157286400
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-STARTTLS
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250 SMTPUTF8
C: STARTTLS
S: 220 2.0.0 SMTP server ready
C: EHLO [192.168.0.7]
S: 250-MW3PR05CA0003.outlook.office365.com Hello [<<My IP>>]
S: 250-SIZE 157286400
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-AUTH LOGIN XOAUTH2
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250 SMTPUTF8
C: AUTH XOAUTH2 <<Token omitted but I have confirmed that it is Base64 encoded and 
in the format of base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A")>>
S: 535 5.7.3 Authentication unsuccessful [MW3PR05CA0003.namprd05.prod.outlook.com]
MailKit.Security.AuthenticationException: 535: 5.7.3 Authentication unsuccessful 
[MW3PR05CA0003.namprd05.prod.outlook.com]

Любое направление или ресурсы будут признательны, так как большинство существующих сообщений относятся к периоду до 2020 года, когда была добавлена ​​поддержка Legacy SMTP. Кроме того, если вы заметите какое-либо недоразумение, дайте мне знать, чтобы я мог прочитать дополнительную информацию.

Ответы [ 2 ]

1 голос
/ 30 июля 2020

После долгих поисков и попыток поговорить с Microsoft мне было указано направление этого ответа из другого сообщения. (Я добавил вызов POP3, который был в том же формате, что и вызов SMTP в OP.) Ответ , как сказано, включает в себя область https://outlook.office.com/POP.AccessAsUser.All, поэтому после замены POP.AccessAsUser.All у меня было до SMTP и вызовы POP3 работали с использованием современной аутентификации.

Вдобавок, теперь, когда я знаю ответ, я вижу, что он задокументирован в Microsoft Docs Аутентифицировать соединение IMAP, POP или SMTP с помощью OAuth , подтверждая, что это правильное решение.

Обязательно укажите полные области, включая URL-адреса ресурсов Outlook, при авторизации приложения и запросе токена доступа.

| Protocol  | Permission scope string
|-----------|-------------------------------------
| IMAP      | https://outlook.office.com/IMAP.AccessAsUser.All
| POP       | https://outlook.office.com/POP.AccessAsUser.All
| SMTP AUTH | https://outlook.office.com/SMTP.Send

Надеюсь, это поможет любому, кто сталкивается с этой же проблемой

0 голосов
/ 02 июня 2020

У меня была аналогичная проблема, которая была вызвана неправильной конфигурацией Microsoft 365. Подробнее см. MailKit неудачный SMTP OAuth с сервером Microsoft 365 . Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...