Einführung
Das programmatische Versenden von E-Mails mit Gmail erfordert in der Regel eine Authentifizierung. Während App-Passwörter häufig verwendet werden, sind diese aufgrund von Sicherheitsrichtlinien oder organisatorischen Vorgaben möglicherweise keine Option. OAuth2 bietet eine moderne, sichere Alternative zur Authentifizierung von SMTP-Clients, ohne dass Zugangsdaten offengelegt werden müssen.
Dieser Beitrag zeigt, wie man eine E-Mail über den SMTP-Server von Gmail mit OAuth2 in C# sendet.
Warum OAuth2 für Gmail SMTP verwenden?
- Sicherer als passwortbasierte Authentifizierung
- Entspricht den aktuellen Sicherheitsanforderungen von Google
- Vermeidet die Nutzung von App-Passwörtern, die deaktiviert werden können
Moderner Ansatz für Authentifizierung und E-Mail-Versand
Statt Token manuell zu verwalten, verwenden Sie die .NET-Clientbibliotheken von Google zusammen mit MailKit, einem leistungsfähigen SMTP-Client, der OAuth2 unterstützt.
Voraussetzungen
- Google Cloud-Projekt mit aktivierter Gmail API
- Heruntergeladene OAuth 2.0 Zugangsdaten im JSON-Format
- Installierte NuGet-Pakete:
Google.Apis.Auth
MailKit
Schritt 1: Autorisieren und Zugriffstoken erhalten
Verwenden Sie Google’s GoogleWebAuthorizationBroker
, um sich zu authentifizieren und OAuth2-Token mit dem Scope https://mail.google.com/
abzurufen.
Schritt 2: E-Mail mit MailKit erstellen und senden
Nutzen Sie MailKits SmtpClient
und authentifizieren Sie sich über SaslMechanismOAuth2
mit dem Zugriffstoken.
Vollständiges Beispiel in C#
using Google.Apis.Auth.OAuth2;
using Google.Apis.Util.Store;
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var to = "recipient@gmail.com";
var from = "youraddress@gmail.com";
var scopes = new[] { "https://mail.google.com/" };
// Pfad zur OAuth2-Zugangsdaten-JSON-Datei
var credentialPath = @"C:\path\to\credentials.json";
var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.FromFile(credentialPath).Secrets,
scopes,
"user",
CancellationToken.None,
new FileDataStore("TokenStore", true));
var message = CreateEmailMessage(from, to);
using var client = new SmtpClient();
await client.ConnectAsync("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);
var oauth2 = new SaslMechanismOAuth2(from, credential.Token.AccessToken);
await client.AuthenticateAsync(oauth2);
await client.SendAsync(message);
await client.DisconnectAsync(true);
Console.WriteLine("E-Mail erfolgreich gesendet.");
}
static MimeMessage CreateEmailMessage(string from, string to)
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Absender", from));
message.To.Add(new MailboxAddress("Empfänger", to));
message.Subject = "Test-E-Mail per Gmail SMTP und OAuth2";
message.Body = new TextPart("plain")
{
Text = "Dies ist eine Testnachricht, die sicher mit OAuth2 gesendet wurde."
};
return message;
}
}
Zusammenfassung
- Nutzen Sie Googles
GoogleWebAuthorizationBroker
für die OAuth2-Authentifizierung. - Verwenden Sie MailKits
SmtpClient
mitSaslMechanismOAuth2
, um E-Mails über Gmail zu senden. - Vermeiden Sie manuelles Token-Parsing oder die Verwendung von App-Passwörtern.
- Dieser Ansatz gewährleistet eine sichere, moderne Authentifizierung, die mit Gmail kompatibel ist.
Für fortgeschrittene Szenarien sollten Sie das Handling von Token-Aktualisierungen, Fehlerbehandlung und benutzerbasierte Einwilligungsabläufe in Betracht ziehen.