EMail versenden schlägt fehl



  • Hallo zusammen,
    ich habe ein Problem mit dem Versand einer eMail und ich komme nicht mehr weiter - für mich sieht es inzwischen aus wie ein Bug im .NET-Framework...

    So versuche ich eine eMail zu senden:

    try
                {
                    SmtpClient smtpClient = new SmtpClient(Properties.Settings.Default.SMTPServer, Properties.Settings.Default.Port);
                    smtpClient.EnableSsl = Properties.Settings.Default.UseSSL;
                    smtpClient.UseDefaultCredentials = false;
                    NetworkCredential nc = new NetworkCredential(Properties.Settings.Default.UserName, Properties.Settings.Default.Password);
                    smtpClient.Credentials = nc;
                    MailAddress from = new MailAddress(Properties.Settings.Default.FromEMail, Properties.Settings.Default.FromName);
                    MailAddress to = new MailAddress(toAddess, toName);
                    MailMessage message = new MailMessage(from, to);
                    message.Subject = "Test";
                    message.Body = "test...";
                    smtpClient.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
    

    Funktioniert auch mit einem Mail-Server der normalen Login erwartet (AUTH LOGIN). Mit einem anderen aber nicht. Dieser erwartet NTLM. Der Code wirft eine Exception:

    System.Net.Mail.SmtpException: Fehler beim Senden von Mail.
    ---> System.FormatException: SMTP-Server hat eine ungültige Antwort zurückgegeben.
       bei System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte[] buffer, Int32 offset, Int32 read, Boolean readLine)
       bei System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine)
       bei System.Net.Mail.AuthCommand.Send(SmtpConnection conn, String type, String message)
       bei System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
       bei System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
       bei System.Net.Mail.SmtpClient.GetConnection()
       bei System.Net.Mail.SmtpClient.Send(MailMessage message)
       --- Ende der internen Ausnahmestapelüberwachung ---
       bei System.Net.Mail.SmtpClient.Send(MailMessage message)
       bei Test.Form1.button2_Click(Object sender, EventArgs e)
         in C:\Dokumente und Einstellungen\xyz\Eigene Dateien\Projects\TT_Helper\Test\Form1.cs:Zeile 259.
    

    Geht das nciht mit der Klasse? Er scheint schon zu merken, dass er NTLM verwenden soll, aber er scheint es falsch zu verwenden. Zumindest sind die Pakete unterschiedlich die das .NET-Framework und Outlook schicken:

    Outlook:
    1. Command: AUTH NTLM (von Client zu Server)
    2. Response: 334 (von Server an Client)
    3. Message Body (mit TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAADw== als MessageBody)
    ... weitere (für Passwort und email)

    .NET-Framework:
    1. Command: AUTH ntlm TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAADw== (von Client zu Server)
    2. Response: 334 (von Server an Client)
    ... keine weiteren, nach dieser Antwort kommt obige Exception...

    Bug? Oder mach ich einfach was falsch?



  • Hallo Deus,

    Welcher Related Requests For Comments (RFC) für SMPT hats Du implementiert? Ist es RFC 821? Zum Testen müßte ich wissen welcher Mail Provider als Login AUTH LOGIN und AUTH NTLM verwendet. Kannst Du mir zwei frei verfügbare nennen?

    Poste bitte den Code aus Zeile 259 in deiner Form1.cs, da kracht es ja. Und was sagt SmtpException.Message und SmtpException.InnerException genau?

    Grüsse Kalle



  • Hi Kalle,

    ähm... deine Antwort ist sehr seltsam.
    Ich habe überhaupt keine RFC implementiert. Wie gesagt, ich verwende das .NET-Framework.
    Freie eMail-Server kann ich dir keine nennen, ich verwende hier meine Firmen-Accounts.
    Quellcode steht bereits in meinem Posting, und was die Exceptions sagen habe ich auch gepostet...



  • Dann poste wenigstens mal welche Daten in den Variablen: "Properties.Settings.Default.FromEMail" und "toAddess" stehen. Sonst kann man deine Programmzeilen nicht testen. Es gibt SMPT und ESMTP sowie verschiedene Authentifizierungsverfahren die wiederum unabhängig von verwendeten RFC sind.



  • Kalle, das stimmt alles und ich werde sicherlich nicht meine Geschäftsadressen hier posten. Sei versichert, die Daten stimmen



  • dEUs schrieb:

    Kalle, das stimmt alles und ich werde sicherlich nicht meine Geschäftsadressen hier posten. Sei versichert, die Daten stimmen

    LOL Email != Geschäftsadresse. Schön - so fruchtlos aneinander vorbeizureden. Und wie heißt der SMTP-Server(Properties.Settings.Default.SMTPServer). Oder ist der auch tabu! LOL! Übrigends - die paar Zeilen funktionieren mit meinen Mailprovidern. Kennst Du Telnet? Mit dem Programm kannst Du eine Verbindung zu deinem geheimnisvollen SMTP Server aufnehmen und feststellen welches Protokoll und Authentifizierung er gerne hätte. Es gibt auch fertige professionelle SMTP Komponennten die man als Trial von componentsource mal downloaden und testen könnte.



  • Hallo Kalle,

    bitte entschuldige, wenn ich jetzt ausfallend werde, aber ich möchte dich bitten, dich aus diesem Thread fernzuhalten. Du hast bisher nichts zur Lösung des Problems beigetragen, im Gegenzug aber meine Nerven strapaziert.

    • Es ist meine Geschäfts-eMail-Adresse
    • So auch der SMTP-Server
    • Ich weiß selbst, dass diese Zeilen grundsätzlich funktionieren. Habe ich bereits im originalen Beitrag geschrieben.
    • Telnet kenne ich, ja. Deine Überheblichkeit kannst du dir sonst wo hinstecken. 👎
    • Welche Authentifizierung er möchte ist auch klar und steht auch bereits im ersten Beitrag


  • dEUs schrieb:

    bitte entschuldige, wenn ich jetzt ausfallend werde, aber ich möchte dich bitten, dich aus diesem Thread fernzuhalten. Du hast bisher nichts zur Lösung des Problems beigetragen, im Gegenzug aber meine Nerven strapaziert.

    Mein Gott - bist Du empfindlich! Du solltest Deinen Nicknamen, denn bei dem Müll, den Du hier produzierst, könnte ich auf die Idee kommen, Dich ans Kreuz zu nageln 😉 Du bist nicht "ausfallend" - eher lernresistent. Dir scheint ja alles klar zu sein - ich frage mich nur, warum Du dann nicht in der Lage bist, dass Problem zu lösen. Wenn die Diskussion mit mir, deine Nerven übermäßig strapaziert, empfehle ich Dir den Rückzug. Ich möchte nicht, dass aufgrund dieser Nichtigkeit, Deine Gesundheit Schaden nimmt!

    Zurück zur Aufgabenstellung:
    Um mit Deinem Server Verbindung aufzunehmen, hast ja sogar du eingesehen, dass du mit den von dir im OP verwendeten Klassen nicht weiter kommst. Ergo, mußt du dich mit dem Server auf Protokollebene verbinden. Wie heißt das Protokoll? Richtig! TCP o. UDP! (Net-Klasse: TcpClient o. UdpClient) Natürlich brauchst Du bei TCP noch die NetworkStream Klasse zum senden und empfangen von Daten. Und für dich lernbehinderten DAP noch mal ganz deutlich, - was ich seit dem ersten Posting predige: Um deine Aufgabenstellung lösen zu können mußt du die entsprechenden RFCs gelesen und verstanden haben.

    Wenn Du das nicht schafftst, kannst Du die dir auch eine fertige Komponente kaufen:
    http://www.emailarchitect.net/easendmail/



  • Ich frage, ob es ein Bug im .NET-Framework ist, dass die dort implementierte Klasse zum Versand von eMails nciht funktioniert mit gewissen Servern.

    Und du kommst mir mit RFCs und sonstigem Unsinn. Halte dich bitte in Zukunft aus meinen Threads fern



  • Wir haben sowas in der Arbeit auch hingefrickelt. Wenn ich dran denke, schau ich Morgen mal nach, wie wir es gemacht haben.



  • Vielen Dank 👍



  • und gabs schon eine brauchbare Lösung für das Problem?



  • Nein, leider nicht. 😞


Anmelden zum Antworten