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);
}
Signore, questa libreria mi ha salvato la giornata e ha funzionato come un incantesimo! Grazie per la condivisione. – user3288287
No prob, felice ha funzionato per voi! – jstedfast
@jstedfast: perfetto. Puoi dirmi come aggiungere allegati con l'email usando il mailkit? –