Mail-Client mit TLS
-
Hallo zusammen,
ich versuche gerade einen Mail-Client zu schreiben.
Der soll einfach nur eine kurze Text-Nachricht an eine bestimmte Adresse verschicken.
Habe ein kurzes Programm aus dem Netz, das leider nicht funktioniert.
Es geht nur mit ungeschützten Mailservern über Port 25.
Wenn ich kommerzielle Mail-Server mit echten Adressen verwende, dann geht es leider nicht.
Es kommt leider nur die Meldung "Fehler beim Mail-Versand", also unspezifisch.
Was läuft falsch?using System; using System.Net; using System.Net.Mail; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TLSMail { class Program { static void Main() { var smtpClient = new SmtpClient("mail.gmx.net", 587) // 587 ist der Standardport für TLS/STARTTLS { Credentials = new NetworkCredential("ich@gmx.net", "meinpw"), EnableSsl = true }; var mail = new MailMessage( from: "ich@gmx.net", to: "ein.anderer@web.de", subject: "Testmail mit TLS", body: "Dies ist eine Testmail, gesendet über TLS." ); try { smtpClient.Send(mail); Console.WriteLine("E-Mail erfolgreich gesendet!"); } catch (Exception ex) { Console.WriteLine("Fehler beim Senden: " + ex.Message); } } } }
Vielen Dank
-
@elmut19 sagte in Mail-Client mit TLS:
Ich habe noch nie Mails per C# versendet. Aber ein paar Dinge fallen mir auf:
- Welche Art von Exception wird geworfen? SmtpException?, SmtpFailedRecipientException? Siehe SmtpClient.Send Method
- Hast du mal MailKit ausprobiert? Da steht in der MSDN nämlich drin das SmtpClient veraltet ist.
-
@Quiche-Lorraine
Je nachdem, was für einen Mailserver ich verwende (Wir haben auch einen eigenen, kommen folgende Meldungen:- die oben genannte (zumindest sehr ähnlich, wenn ich gmx, web.de verwende)
- "Das Remotezertifikat ist laut Validierungsverfahren ungültig" (intern)
- "Postfach nicht verfügbar. Die Serverantwort war: 5.7.54 SMTP; Unable to relay recipient in non-accepted domain" (mit eigenem Server nach z.B. gmx)
Bei der letzten könnte es so sein, da evtl. doch über einen anderen eigenen versand wird.
Mein ToDo: Es soll eine Maschine überwacht werden, die einen Alarm raussendet, wenn was nicht stimmt.
-
Ich nehme an, es kommt auf der Konsole "Fehler beim Senden: Fehler beim Mail-Versand"? Interessant wäre aber, was die tatsächliche Exception ist. Könntest du die Ausgabe in der Catch-Anweisung abändern, damit die ganze Exception ausgegeben wird und nicht nur die Message:
Console.WriteLine("Fehler beim Senden: " + ex);