Mail Versand mit TLS 1.2 auf VB.NET Umgebung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von mgbig.

    Mail Versand mit TLS 1.2 auf VB.NET Umgebung

    Moin

    Mein Mailanbieter ionos.de schrieb mir neulich, dass der E-Mail Versand nur noch über das Verschlüsselungsprotokoll TLS 1.2 geschehen kann. Ich versende direkt aus einer Anwendung Statusnachrichten (kein Empfang) und zwar so

    Quellcode

    1. Dim message As New MailMessage("noreply@domain.de", empfaenger, Betreff, Nachricht)
    2. message.ReplyToList.Add(ReplyToMail)
    3. Dim emailClient As New SmtpClient("smtp.ionos.de")
    4. emailClient.Credentials = New Net.NetworkCredential("noreply@domain.de", "password")
    5. emailClient.Port = 587
    6. emailClient.Send(message)


    Habe ich eine Chance das TLS 1.2 konform umzubauen? Habe leider hier nichts gefunden. Ich weiß, das der Port falsch ist, aber ich weiß auch nicht wie ich TLS überhaupt anspreche.
    Das Projekt läuft unter NET Framework 4.5
    Danke mgbig

    *Topic verschoben*
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Für alle Sachen Email kann ich MailKit und MimeKit von jstedfast wärmstens empfehlen.
    github.com/jstedfast/MailKit

    Das übernimmt alles für dich und ist nicht mit diesen halbgaren Sachen aus dem Framework zu vergleichen.

    Anbei ein Beispiel aus seinem Repo:
    Ist zwar C#, aber das geht auch genau so in VB.

    C#-Quellcode

    1. using System;
    2. using MailKit.Net.Smtp;
    3. using MailKit;
    4. using MimeKit;
    5. namespace TestClient {
    6. class Program
    7. {
    8. public static void Main (string[] args)
    9. {
    10. var message = new MimeMessage ();
    11. message.From.Add (new MailboxAddress ("Joey Tribbiani", "joey@friends.com"));
    12. message.To.Add (new MailboxAddress ("Mrs. Chanandler Bong", "chandler@friends.com"));
    13. message.Subject = "How you doin'?";
    14. message.Body = new TextPart ("plain") {
    15. Text = @"Hey Chandler,
    16. I just wanted to let you know that Monica and I were going to go play some paintball, you in?
    17. -- Joey"
    18. };
    19. using (var client = new SmtpClient ()) {
    20. client.Connect ("smtp.friends.com", 587, false);
    21. // Note: only needed if the SMTP server requires authentication
    22. client.Authenticate ("joey", "password");
    23. client.Send (message);
    24. client.Disconnect (true);
    25. }
    26. }
    27. }
    28. }
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Versuch es mal hiermit, ganz am Anfang von deinem Code (brauchst nur beim start zu setzten):

    C#-Quellcode

    1. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

    Oder falls du noch andere haben willst:

    C#-Quellcode

    1. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    Ich verwende seit Jahren schon die Komponente von Limilabs.
    Habe die Ionos-Mail auch bekommen und daher auch bei mir alles auf TLS12 umgestellt.
    Das sieht im Limilabs Code ungefähr so aus:

    VB.NET-Quellcode

    1. Using smtp As New Smtp()
    2. Try
    3. smtp.SSLConfiguration.EnabledSslProtocols = SslProtocols.Tls12
    4. smtp.Connect(EmailKonten(Kontoindex).smtpServer, EmailKonten(Kontoindex).smtpPort, EmailKonten(Kontoindex).SMTPSSLErforderlich)
    5. Dim supportsStartTLS As Boolean = smtp.SupportedExtensions().Contains(SmtpExtension.StartTLS)
    6. If supportsStartTLS = True Then smtp.StartTLS()
    7. smtp.UseBestLogin(EmailKonten(Kontoindex).Login, EmailKonten(Kontoindex).Password)
    8. Dim result As ISendMessageResult = smtp.SendMessage(email)
    9. If result.Status = SendMessageStatus.Success Then
    10. GlobalEmailError = "Email erfolgreich gesendet."
    11. End If
    12. smtp.Close()
    13. Catch ex As Exception
    14. GlobalEmailError = "Fehler beim Versenden der Email " + Err.Number.ToString + ": " + ex.Message
    15. smtp.Close()
    16. End Try
    17. End Using
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Du kannst dein E-Mail-Versandprogramm auf TLS 1.2 umstellen, um den Anforderungen deines E-Mail-Anbieters zu entsprechen.

    Um TLS 1.2 für den E-Mail-Versand zu aktivieren, musst du lediglich die Einstellungen für den SMTP-Client ändern.

    VB.NET-Quellcode

    1. Dim message As New MailMessage("noreply@domain.de", empfaenger, Betreff, Nachricht)
    2. message.ReplyToList.Add(ReplyToMail)
    3. Dim emailClient As New SmtpClient("smtp.ionos.de")
    4. emailClient.Credentials = New Net.NetworkCredential("noreply@domain.de", "password")
    5. emailClient.Port = 587
    6. emailClient.EnableSsl = True
    7. emailClient.Send(message)


    In dem Code haben wir die Eigenschaft EnableSsl auf True gesetzt, um sicherzustellen, dass der SMTP-Client TLS 1.2 verwendet. Beachte, dass einige SMTP-Server möglicherweise auch einen anderen Port verwenden, wenn TLS 1.2 aktiviert ist. Stelle sicher, dass du die Portnummer entsprechend den Anforderungen deines E-Mail-Anbieters aktualisierst.
    @WhiteFox Das ist so nicht ganz richtig, EnableSsl hat kein einfluss darauf welche Version von TLS benutzt wird, bei dem Parameter geht es um StartTLS vs. SMPT over SSL/TLS.
    Welche Version von TLS benutzt wird, hängt vom verwendeten .Net Framework und der Konfiguration ab.
    Moin

    war leider anderweitig beschäftigt.
    Also, wenn ich diesen Code am Anfang setzte

    slice schrieb:

    Versuch es mal hiermit, ganz am Anfang von deinem Code (brauchst nur beim start zu setzten):

    C#-Quellcode

    1. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;


    z.B. so

    C#-Quellcode

    1. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    2. Dim message As New MailMessage("noreply@domain.de", empfaenger, Betreff, Nachricht)
    3. message.ReplyToList.Add(ReplyToMail)
    4. Dim emailClient As New SmtpClient("smtp.ionos.de")
    5. emailClient.Credentials = New Net.NetworkCredential("noreply@domain.de", "password")
    6. emailClient.Port = 587
    7. emailClient.Send(message)


    dann reicht das schon aus? Das wäre natürlich die einfachste Methode und ich habe es schon getestet. Kann ich irgendwo in der empfangenen Mail erkennen ob das richtig verschickt wurde?
    Danke mgbig
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    Wenn du keine Fehlermeldung/Exception bekommen hast, dann müsste TLS 1.2 für die Verbindung benutzt worden sein.
    Du kannst, unter Umständen, sehen wie die Mail eingeliefert wurde, schau dafür mal in die Mail-Header Received.

    PS: Du musst das nicht jedes mal setzten, es reicht wenn du das beim starten deiner Anwendung setzt.
    Moin

    Ich habe den Header ausgelesen und da steht das hier (habe ein bisschen was XXX)

    from mout.kundenserver.de ([217.xx.1xx.74]) by mx.kundenserver.de (mxeue109 [217.xxx.xxx.67]) with ESMTPS (Nemesis) id 1MLh0Y-1pxXMv12wq-00HewD for <post@domain.de>; Sat, 25 Mar 2023 10:46:49 +0100
    from xxxxxxxxxx10-1 ([91.xx.41.70]) by mrelayeu.kundenserver.de (mreue109 [213.xxx.67.1xx]) with ESMTPA (Nemesis) id 1MUGmL-1q65pD3ztr-00RGfh for <post@domain.de>; Sat, 25 Mar 2023 10:46:49 +0100

    ich kann da nichts draus lesen?
    Ich werde auch mal ionos kontaktieren...
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    Deswegen das "Unter Umständen", bei mir steht, bei einigen Mails folgendes, als erster Receive-Header (der der als letztes genannt wird):

    Quellcode

    1. from [46.**.**.***] (helo=host.bar.de) by sslproxy01.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <foo@bar.de>) id 1pfu64-000Nn3-Ru for postmaster@bar.de; Sat, 25 Mar 2023 03:57:37 +0100


    Das hängt vom Mailsystem ab.

    Edit:
    Alternativ, könntest du, wenn du dich damit auskennst, Wireshark benutzten und eine Mail mit deiner Anwendung versenden.
    Da siehst du zwar nicht den Inhalt, wer hätte es bei SSL/TLS gedacht, aber du siehst welche Version benutzt wird.
    Mit Wireshark habe ich keine Erfahrung

    aber: Ich habe aus meinem Programm an eine E-Mail mit einer anderen Domain gesendet und siehe da, es sieht jetzt so aus:

    from mout.xxxxxxxxserver.de (mout.xxxxxxserver.de [217.xx.xx.xx]) by mx4bln1.xxxxx.de (8.17.1/8.16.1) with ESMTPS id 32PDKJhL060310 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO) for <bestellung@domain.de>; Sat, 25 Mar 2023 14:20:19 +0100

    wobei mich das insofern iritiert, da ich ja eigentlich mit TLS 1.2 senden wollte??? Oder bezieht sich das nur auf den Empfang der anderen Domain?
    In jedem Fall habe ich mein Glück schon bei ionos versucht. Die haben mich aber auf Mo-Fr vertröstet, nur dann ist jemand aus der Technik da :)
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    Ist schwer zu sagen, hast du die Email von mout.xxxxxxxxserver.de gesendet?
    Wenn nicht, ist das der Receive-Header von einem der Server dazwischen.

    slice schrieb:

    hast du die Email von mout.xxxxxxxxserver.de gesendet?
    Wenn nicht, ist das der Receive-Header von einem der Server dazwischen.


    Nein, ich habe von einer anderen Mail gesendet. Ich kann nur schätzen, dass das ein Server von Ionos ist.
    Da habe ich jetzt nochmal angerufen und nachgefragt und ich solle mich doch bitte an den Hersteller des E-Mailprogramm wenden :)

    Ich habe noch die Seite checktls.com/ gefunden.
    Ich habe dort auch versucht mit "Sender Test" eine Email aus dem von mir porgrammiertem System zu senden. Das hat auch funktioniert. und ich bekomme diese Antwort per Mail:
    SUCCESSFUL //email/test From:
    Your email was sent securely using TLS.
    Besides TLS, your email had these errors:
    • SNI (ts11-do.CheckTLS.com) does not match MX (ts11-do.checktls.com)


    Aus dem Fehler werde ich nicht schlau...

    Auf dieser Seite sieht es auch so aus, das man Parameter abfragen kann:
    checktls.com/TestSender
    für mich interessant: SSL Version Used
    aber ich weiß nicht wie ich das bewerkstelligen soll. Ich habe das einfach in den Text der E-Mail kopiert und es half nicht...

    Eine Idee?
    Danke mgibg
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    Kannst du mal alle Receive-Header einer Email, die du verschickst, posten?
    Gerne auch zensiert, aber wichtig wäre das es alle sind.
    Meinst Du die, die ich aus meiner Anwendug verschicke? Das wären diese hier:


    from moutxxxxxxxserver.de ([212.227.xxx.xxx]) by mx.xxxxenserver.de (mxeue111 [217.72.xxx.xxx]) with ESMTPS (Nemesis) id 1MddX5-1qGVQI1xVR-00ZgWg for <post@domain.de>; Tue, 28 Mar 2023 16:55:55 +0200
    from xxxxxxxin10-1 ([87.152.xxx.xxx]) by mrelayeu.xxxxnserver.de (mreue011 [213.165.xxx.xxx]) with ESMTPA (Nemesis) id 1MpUIW-1qF4Eh0i0C-00puYh for <post@sdomain.de>; Tue, 28 Mar 2023 16:55:55 +0200


    Empfangen mit Thundebird und dort aus den Kopfzeilen kopiert.

    Es sind genau 2 Header Zeilen da. Die hatte ich so aber auch schon weiter oben.
    Oder habe ich das falsch verstanden?
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    Dachte das wäre nur ein kleiner Ausschnitt der Header, deswegen die Frage.
    Schade das ionos das nicht mit in die Header schreibt, aber da es funktioniert, sollte es passen.

    Bedenke jedoch, wenn du die Zeile ausführst, gilt das für die gesamte Anwendung und alle anderen Anfragen die mit SSL/TLS zusammenhängen (HTTP etc.).
    Deswegen würde ich empfehlen auch die anderen TLS-Versionen mit zunehmen - die Endpunkte handeln das dann mit sich selbst aus:
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13
    Es findet noch FTP Verkehr statt, das werde ich noch mal checken, meine aber, das läuft ohne Probleme.
    Ich werde jetzt einfach täglich beim Systemstart eine Mail an mich versenden und wenn ich die nach dem 16.5. nicht mehr bekomme, dann habe ich ein Problem, was doch nicht gelöst ist...
    Danke für die Mühe

    mit Checktls.com bin ich aber auch noch nicht weiter. ?(
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    Wenn es reines FTP ist (nicht FTP over SSL), wird die Anweisung keine Auswirkung haben, da es nur um SSL/TLS geht.
    Alles klar, dann viel Erfolg :)
    Hallo zusammen, ich habe die gleiche Mai l von Ionos bekommen und stehe vor dem gleichen Problem.

    Wenn ich aber die Zeile versuche einzufügen:

    Quellcode

    1. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12


    bekomme ich die Fehlermeldung TLs12 ist kein Member von "System.Net.SecurityProtocolType"

    Könnte ihr da etwas zu sagen?