Warum E-Mail-Versand über Gmail in .NET eine Herausforderung ist (und wie man sie meistert)
\n\nWenn Sie jemals versucht haben, den E-Mail-Versand über Gmail in Ihrer .NET-Anwendung einzurichten, kennen Sie das Problem: Es sieht einfach aus, wird aber schnell zur Geduldsprobe. Sie schreiben 10 Zeilen Code, starten das Programm – und erhalten einen SmtpException mit einer kryptischen Meldung über eine "unsichere Anwendung". Kommt Ihnen bekannt vor?
Auf Stack Overflow hat die Frage "Sending email in .NET through Gmail" tausende Aufrufe und hunderte Antworten gesammelt. Entwickler kämpfen seit Jahren mit diesem Problem. In diesem Artikel zeigen wir Ihnen 4 praxisnahe Ansätze in C#, von der klassischen Methode bis zu modernen Lösungen, und erklären, welchen Sie im Jahr 2025 verwenden sollten.
\n\nSpoiler: Der Code, den Sie in einem Blogbeitrag von 2015 gefunden haben, funktioniert wahrscheinlich nicht mehr. Google verschärft ständig seine Sicherheitsrichtlinien. Aber keine Sorge – wir zeigen Ihnen funktionierende Alternativen.
\n\nAnsatz 1: Der klassische SmtpClient (und warum er veraltet ist)
\n\nDer naheliegendste Weg ist die Verwendung des integrierten SmtpClient aus System.Net.Mail. So sah das in den "goldenen Zeiten" aus:
using System.Net;\nusing System.Net.Mail;\n\nvar message = new MailMessage("your@gmail.com", "recipient@example.com")\n{\n Subject = "Test-E-Mail aus .NET",\n Body = "Hallo! Das ist ein Test."\n};\n\nusing var client = new SmtpClient("smtp.gmail.com", 587)\n{\n Credentials = new NetworkCredential("your@gmail.com", "your-password"),\n EnableSsl = true\n};\n\nclient.Send(message);\n\nIn den Jahren 2010-2015 hat das funktioniert. Heute blockiert Google die Anmeldung mit einem normalen Passwort für die meisten Konten. Sie benötigen:
\n- \n
- Ein App-Passwort – aber nur, wenn die Zwei-Faktor-Authentifizierung aktiviert ist \n
- Oder die Option "Zugriff für weniger sichere Apps" – diese wurde von Google bereits entfernt \n
Nachteile dieses Ansatzes:
\n- \n
SmtpClientist in .NET 5+ alsObsoletemarkiert \n - Unterstützt keine modernen Authentifizierungsprotokolle (OAuth 2.0) \n
- Ein App-Passwort ist nicht ewig gültig – es muss manuell erneuert werden \n
Wann verwenden: Nur für schnelle Prototypen oder interne Tools, bei denen Sicherheit keine kritische Rolle spielt.
\n\nAnsatz 2: MailKit – modern und leistungsstark
\n\nWenn Sie eine professionelle Lösung suchen, verwenden Sie die Bibliothek MailKit vom Mono-Entwickler. Sie funktioniert nicht nur zuverlässig, sondern wird auch aktiv weiterentwickelt.
\n\nInstallieren Sie zuerst das Paket:
\ndotnet add package MailKit\n\nUnd hier der Code mit einem App-Passwort:
\n\nusing MailKit.Net.Smtp;\nusing MimeKit;\n\nvar message = new MimeMessage();\nmessage.From.Add(new MailboxAddress("Ihr Name", "your@gmail.com"));\nmessage.To.Add(new MailboxAddress("Empfänger", "recipient@example.com"));\nmessage.Subject = "E-Mail via MailKit";\nmessage.Body = new TextPart("plain") { Text = "Hallo aus .NET!" };\n\nusing var client = new SmtpClient();\nawait client.ConnectAsync("smtp.gmail.com", 587, MailKit.Security.SecureSocketOptions.StartTls);\nawait client.AuthenticateAsync("your@gmail.com", "ihr-app-passwort");\nawait client.SendAsync(message);\nawait client.DisconnectAsync(true);\n\nWarum ist MailKit besser als SmtpClient?
\n- \n
- Asynchrone Methoden – blockiert keinen Thread \n
- Unterstützung für MIME, Signaturen und Verschlüsselung \n
- Läuft auf allen .NET-Plattformen (inklusive .NET MAUI und Unity) \n
- Nicht als veraltet markiert \n
Aber auch dieser Ansatz hat eine Einschränkung: Das App-Passwort ist eine temporäre Lösung. Wenn Ihr Google-Konto kompromittiert wird, kann ein Angreifer in Ihrem Namen E-Mails versenden.
\n\nAnsatz 3: Google API + OAuth 2.0 (für ernsthafte Projekte)
\n\nDer sicherste und korrekteste Weg ist die Verwendung der