2014-06-12 22 views
11

.NET supporta l'autenticazione SMTP tramite il protocollo OAuth? Fondamentalmente, mi piacerebbe poter inviare e-mail sui behalves degli utenti usando i token di accesso OAuth. Tuttavia, non ho trovato un supporto per questo nel framework .NET.SMTP e OAuth 2

Google fornisce alcuni samples per questo in altri ambienti ma non in .NET.

risposta

9

System.Net.Mail non supporta OAuth o OAuth2. Tuttavia, puoi usare MailKit (nota: supporta solo OAuth2) SmtpClient per inviare messaggi finché hai il token di accesso OAuth dell'utente (MailKit non ha codice che recupera il token OAuth, ma può usarlo se hai esso).

La prima cosa che devi fare è seguire Google's instructions per ottenere le credenziali di OAuth 2.0 per la tua applicazione.

Una volta fatto questo, il modo più semplice per ottenere un token di accesso è quello di utilizzare Google.Apis.Auth biblioteca di Google:

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

bool result = await credential.RequestAccessTokenAsync (CancellationToken.None); 

// Note: result will be true if the access token was received successfully 

Ora che avete un token di accesso (credential.Token.AccessToken), è possibile utilizzarlo con MailKit come se fosse la password:

using (var client = new SmtpClient()) { 
    client.Connect ("smtp.gmail.com", 587, SecureSocketOptions.StartTls); 

    // use the access token 
    var oauth2 = new SaslMechanismOAuth2 ("[email protected]", credential.Token.AccessToken); 
    client.Authenticate (oauth2); 

    client.Send (message); 

    client.Disconnect (true); 
} 
+1

Signore, questa libreria mi ha salvato la giornata e ha funzionato come un incantesimo! Grazie per la condivisione. – user3288287

+0

No prob, felice ha funzionato per voi! – jstedfast

+0

@jstedfast: perfetto. Puoi dirmi come aggiungere allegati con l'email usando il mailkit? –

Problemi correlati