2014-12-01 2 views
0

Я пытаюсь использовать MailKit (http://jstedfast.github.io/MailKit/docs/index.html) для входа в Gmail с использованием oAuth. Я могу войти в Google API с помощью обновленного AuthToken, но когда я пытаюсь использовать обновленный токен в MailKit, я получаю сообщение об ошибке «Недопустимые учетные данные»Как я могу войти в gmail IMAP с помощью MailKit

Любые подсказки ?? Спасибо, Джефф

Вот мой код:

var secrets = new ClientSecrets() 
     { 
      ClientId = "xxx-yyy.apps.googleusercontent.com", 
      ClientSecret = "xyzSecret" 
     }; 

     IAuthorizationCodeFlow flow = 
       new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer 
       { 
        ClientSecrets = secrets, 
        Scopes = new string[] { GmailService.Scope.GmailReadonly } 
       }); 

     var tokenResponse = flow.RefreshTokenAsync("", connection.RefreshToken, CancellationToken.None).Result; 

     using (var client = new MailKit.Net.Imap.ImapClient()) 
     { 
      var credentials = new NetworkCredential("[email protected]", tokenResponse.AccessToken); 

      client.Connect("imap.gmail.com", 993, true, CancellationToken.None); 
      try 
      { 
       client.Authenticate(credentials, CancellationToken.None); 
      } 
      catch (Exception ex) 
      { 

       throw; 
      } 


     } 
+0

OAUTH2 требует пользовательского потока аутентификации, он не может использовать стандартную аутентификацию IMAP, что и делает это. Похоже, вы передаете токен доступа в качестве пароля, а это не так. – Max

+0

Собственно, с MailKit я думаю, что он передается как пароль. Вот ссылка на другой ответ, используя SMTP, но все же моя не работает. Я собираюсь изучить сферу действия, которую мой AuthCode не может быть создан с использованием той, которая мне нужна. Я только что нашел https://mail.google.com для доступа к IMAP. У меня был доступ только для чтения из API. Не понимал, что сейчас все по-другому. Во всяком случае, вот ссылка @Max. [link] (http://stackoverflow.com/questions/24195508/smtp-and-oauth-2/24204968#24204968) – Jeff

ответ

0

более ясный ответ, что объем был неправильно в исходном коде

Scopes = new string[] { GmailService.Scope.GmailReadonly } 

должен быть

Scopes = new string[] { GmailService.Scope.MailGoogleCom } 

для аутентификации с IMAPI использованием маркера доступа.

0

Это была просто проблема сферы. Вышеприведенный код отлично работает для gmail oAuth !!

+0

Что такое переменная 'connection'? –

0
using (var client = new ImapClient()) 
      { 
       client.Connect("imap.gmail.com", 993, true); 
       client.AuthenticationMechanisms.Remove("XOAUTH2"); 
       client.Authenticate(EmailId, Password); 
      } 

Вышеупомянутый фрагмент кода используется для входа в gmail с использованием инструмента imap и MailKit. Но перед этим вам нужно войти в gmail вручную и установить флажок «Включить Imap» в настройках. Это, безусловно, будет работать.

Смежные вопросы