2014-12-01 2 views
0

oAuth를 사용하여 Gmail에 로그인 할 때 MailKit (http://jstedfast.github.io/MailKit/docs/index.html)을 사용하려고합니다. 새로 고친 AuthToken을 사용하여 Google API에 로그인 할 수 있지만 MailKit에서 새로 고친 토큰을 사용하려고하면 "잘못된 자격증 명"오류가 발생합니다.MailKit을 사용하여 Gmail IMAP에 로그인하는 방법

모든 단서 ??

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가 필요한 것을 사용하여 빌드되지 않을 수도있는 범위를 조사 할 것입니다. 방금 IMAP 액세스를 위해 https://mail.google.com을 찾았습니다. Mine은 API에서 읽기 액세스 만했습니다. 그것이 지금까지는 다르다는 것을 깨닫지 못했습니다. 어쨌든, 여기 @Max 링크가 있습니다. [link] (http://stackoverflow.com/questions/24195508/smtp-and-oauth-2/24204968#24204968) – Jeff

답변

0

명확한 해답은 범위

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

는 액세스 토큰을 사용 IMAPI 인증하기 위해

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

해야하는 원래의 코드 올바르지이다.

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); 
      } 

위의 코드는 imap 및 MailKit 도구를 사용하여 Gmail에 로그인하는 데 사용됩니다. 하지만이 전에는 gmail에 수동으로 로그인하고 설정에서 "Enable Imap"옵션을 체크해야합니다. 이것은 분명히 효과가있을 것입니다.

관련 문제