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.


  • Administrator

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



  • @Dravere
    Hallo Dravere,

    Ja, ich habe leider nicht tiefer in die Message reingeschaut.
    Die eigenetliche "ex.Message" lautet zwar so, aber es gibt noch die Info:
    "Verbindung zum Remote Server kann nicht hergestellt werden" und
    "Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne ...".

    Ich habe den Postausgang allerdings nach den Vorgaben, die im Netz über gmx zu finden sind eingestellt.
    Postausgang (SMTP)
    Server: mail.gmx.net
    Port: 587
    Verschlüsselung: STARTTLS, TLS oder Verschlüsselung


  • Administrator

    @elmut19 In dem Fall hast du womöglich ein Problem in deinem Netzwerk. Ist das zufälligerweise ein Unternehmensnetzwerk? Es kann gut sein, dass dort ausgehende Verbindungen auf Port 587 verhindert werden. Das müsstest du dann mit deiner lokalen IT anschauen.

    Beim internen Mail-Server ist es gut möglich, dass unternehmenseigene Zertifikate zum Einsatz kommen. Weshalb das dann zu Fehlern bei der Validierung führen kann. Womöglich müsstest du da das öffentliche Root-Zertifikat vom Unternehmen mitgeben, damit die Verbindung aufgebaut werden kann.

    Mitunter darum gibt es dann auch lokale SMTP Testumgebungen. Zum Beispiel smtp4dev ist so eine Umgebung, welche ich kenne. So kann man alles lokal auf dem PC testen und ist unabhängig von all diesen Einschränkungen bei der Entwicklung.



  • @elmut19
    Wenn du eine Unternehmens-EMail hast, würde ich mal die Einstellungen in deinem Testprogramm übernehmen.



  • @Quiche-Lorraine @Dravere
    Ja, Unterehmensnetz.
    Habe aber auch ständig mit unserer IT geredet.
    Die haben zumindest gesagt, er sei (Firewall) nicht geblockt.
    Hab auch im Defender nachgesehen und nix gefunden.
    Über unseren Mailserver, nach draussen, kommt auch derselbe Fehler.
    Über internen Mailserver nach intern geht.
    Über internen Mailserver nach draussen kommt "Remotezertifikat ... ungültig".
    Werd die IT doch nochmal fragen



  • @elmut19 sagte in Mail-Client mit TLS:

    Über unseren Mailserver, nach draussen, kommt auch derselbe Fehler.

    Du bist mir zu schnell.

    Habe ich dich richtig verstanden? Du kannst über deinen Firmen-Mail Account Mails verschicken, aber wenn du die Mail-Einstellungen in deinem Programm nutzt, funktioniert es nicht?



  • @Quiche-Lorraine
    Nicht ganz.
    Wir haben zwei Mailserver Konfigurationen. Die eine ist eigentlich ein Web-Client, die mit der ich rein intern verschicken kann aber nicht zu gmx, beispielsweise.
    Der anderen ist der eigentliche Mailserver, über den dasselbe Resultat, wie rein über gmx kommt.
    Aber ich gebs wohl auf, eine einfache Message über EMail zu versenden.
    CURL habe ich auch schon probiert. Das bekomme ich bei mir nichtmal ganz kompiliert.
    Und es wird dann wohl dasselbe Resultat liefern.
    Die einzige Hoffnung wäre, dass man einen genaueren Fehlerpunkt findet.

    Andererseits kann unsere ERP Software ja auch Mails verschicken, über unseren mailserver.
    Also irgendwas muss doch fehlen?


Anmelden zum Antworten