2016-05-03 4 views
0

есть ли способ доступа к почте Gmail по IMAP с использованием аутентификации OAUTH2 в asp.net C#?Как можно получить почту Gmail через IMAP, используя аутентификацию или извлечение OAuth2 с использованием API Gmail в asp.net C#?

с помощью google api, я могу получить MessageID. Но не удалось получить подробности этого сообщения:

var gmailservice = new GmailService(new BaseClientService.Initializer() 
        { 
         HttpClientInitializer = credential, 
         ApplicationName = appName, 
        }); 
List<Message> objList = ListMessages(gmailservice, "me", AnyFromEmailAddress); 

foreach (Message objM in objList) 
{ 
    // I can retrieve objM.Id but how to get message detail? 
} 

Или есть бесплатный клиент IMAP, которые используют oauth2 для входа в систему, как Mail.dll Limilab в

+1

Не знаю, что я знаю, я заплатил за компонент Limilabs, он работает как чемпион. Это действительно недорого, когда вы думаете о том времени, когда оно спасет вас. Я использовал их компонент с 2008 года. – Henry

+0

Вы реализовали образец из этой [ссылки] (https://developers.google.com/gmail/api/quickstart/dotnet#step_3_set_up_the_sample)? –

+0

Извините за поздний ответ, поскольку я страдал от лихорадки. Да, я реализовал эту ссылку и отсутствовал html электронной почты. –

ответ

-1

Использование MailKit и рамки OAuth2 компании Google от NuGet, вы можете сделать вот так:

using (var client = new ImapClient()) { 
    client.Connect ("imap.gmail.com", 993, true); 

    var certificate = new X509Certificate2 (@"C:\path\to\certificate.p12", "password", X509KeyStorageFlags.Exportable); 
    var credential = new ServiceAccountCredential (new ServiceAccountCredential.Initializer ("[email protected]") { 
     // Note: other scopes can be found here: https://developers.google.com/gmail/api/auth/scopes 
     Scopes = new[] { "https://mail.google.com/" }, 
     User = "[email protected]" 
    }.FromCertificate (certificate)); 

    // Note: result will be true if the access token was received successfully 
    bool result = await credential.RequestAccessTokenAsync (cancel.Token); 

    // use the access token as the password string 
    client.Authenticate ("[email protected]", credential.Token.AccessToken); 

    // ... 

    client.Disconnect (true); 
}