none
Gelegentlicher Fehler beim Senden von eMails (Fehlermeldung im Text) RRS feed

  • Frage

  • Hallo zusammen,

    ich habe eine Applikation entwickelt, die unter anderem auch E-Mails automatisiert versendet.

    Die Applikation läuft bei allen Kunden tadellos,.... bis auf einen Kunden.

    Dieser erhält bei ungefähr jeden 5. Mail, die nachfolgende Fehlermeldung:

    >>

    System.Net.Mail.SmtpException: Fehler beim Senden von Mail. ---> System.Net.Sockets.SocketException: Ein ungültiges Argument wurde angegeben

       bei System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult result)

       bei System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult result)

    <<

    Ich verwende sendasync zum Versenden der E-Mails,... ansonsten nichts außergewöhnliches. Wie bereits gesagt, es klappt nur bei einem Kunden nicht.

    Situation vor Ort:
    Windows 7
    Direkter Zugangs zum Internet über LANCOM-Router (Port 20 ist freigeschaltet).

    Was habe ich bisher probiert:

    * Alle Updates eingespielt
    * Windows Firewall deaktiviert
    * Virenkiller und ähnliches deaktiviert
    * Versandt über einen anderen Port (diesen vorher im LANCOM freigegeben)
    * Anderen SMTP-Server verwendet
    * IP V6 ausgeschaltet ->Verzweiflungstat :)
    * Stundenlang gegoogelt ohne Ergebnis

    Tja, und da bin ich nun mit meinem Latein am Ende....

    Freue mich über jede Unterstützung.

    Gernot


    Dienstag, 8. Mai 2012 09:58

Antworten

  • Hi Gernot,

    und normales send funktionierte? Was kann denn daran Zeitkritisch sein bei nur einer Mail? Wenn send funktioniert, warum erstellst Du dann nicht ganz klassisch einen neuen Thread für den Mailversand?

    Volker

    Und Abends ein Glas Wein von AMAVINO

    Mittwoch, 9. Mai 2012 13:24

Alle Antworten

  • Hi Gernot,

    also prinzipiell sollte für normales ( ohne SSL ) SMTP der Port 25 benutzt werden, da die meisten SMTP Server auf diesen Port hören.


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Dienstag, 8. Mai 2012 10:02
  • Hi Hannes,

    Du hast natürlich recht,... ich hatte mich verschrieben,... natürlich benutze ich den Port 25

    Grüße

    Gernot

    Dienstag, 8. Mai 2012 19:55
  • Hi Gernot,

    gibt es keinen Fehler-Code?

    Werden die Daten vor Versand auf Richtigkeit überprüft (z. B. Leerzeichen in der Adresse, Umlaute, Anführunszeichen, ....)?

    Volker


    Und Abends ein Glas Wein von AMAVINO

    Mittwoch, 9. Mai 2012 06:09
  • Hallo Volker,

    nein, Fehlercode gibt es leider keinen,... die genannte Fehlermeldung kommt aus dem Exception-Handling ohne irgendeinen Fehlercode.

    Die Daten sind definitiv valide. Diese kommen fest hinterlegt aus einer Datenbank.
    Wie bereits gesagt, der Versand an die identischen Empfänger funktioniert "meistens".... das Verhältnis ist ungefähr 5:1. Auf 5 erfolgreich versande E-Mail kommt eine E-Mail, die diesen Fehler wirft.

    Vielen Dank

    Gernot

    Mittwoch, 9. Mai 2012 07:16
  • Hi Gernot,

    nur noch mal zum Verständnis:

    Es gibt ein Paket Email-Adressen. An diese wird verschickt. Ca. 5 mal klappt der Versand an alle und dann plötzlich klappt der Vesand mal nicht? Oder ist da immer nur jede 5 Email-Adresse betroffen? Oder ist es immer die gleiche Email-Adresse die nicht funzt?

    Kannst Du an diese Adressen über einen anderen ISP senden? Für miche deutet die Meldung nämlich eher auf ein LAN-Problem (abgebrochene Verbindung, nicht erreichbar) als auf ein Mail-Problem hin. Evtl. auch ein DNS-Problem im LAN (z. B. veralteter DNS-Eintrag im LAN, aber Mail-Server hat Dynamische IP und inzwischen eine neue).

    Volker


    Und Abends ein Glas Wein von AMAVINO

    Mittwoch, 9. Mai 2012 07:30
  • Hallo Volker,

    prinzipiell richtig verstanden:

    * Aus einem Pool von ca. 20 eMail-Adressen wird eine Adresse (per Zufall) rausgesucht
    * An diese ausgesuchte Adresse wird die eMail versendet
    * Dieses funktioniert fast(!) immer.
    * _Ungefähr_ jeder 5. Versandt schlägt mit der genannten Fehlermeldung fehl (es ist aber kein wirklicher Rythmus z erkennen.
    * Es ist nicht immer die gleiche eMail-Adresse

    * Ich kann leider nicht über einen anderen ISP senden (Kunden hat nur "eine" Leitung)
    * Anderen SMTP-Server bei anderem Anbieter habe ich mit identischem Ergebnis gestestet.
    * Mail-Server hat eine statische IP-Adresse (liegt ja außerhalb bei den üblichen "großen" Anbieter
    * Ich habe während des Tages mal einen ping -t gegen den Mailserver laufen lassen und konnte hierbei keine Verbindungsabbrüche erkennen....

    Tja..... ??

    Gernot

     

    Mittwoch, 9. Mai 2012 10:05
  • Ok, mit dem Mail-Server mit Dyn Ip meinte ich eigentlich den Empfänger der Mail aber nachdem es wohl immer andere Mail-Adressen betrifft spielt das wohl keine Rolle. Aber ich habe ja noch Ideen.

    Warum verwendest Du eigentlich sendasync anstatt send? Und noch eine Frage Dein Code sieht nicht rein zufällig in etwas so aus:

    for each mailadress in mailadress
       sendasync
    next

    Falls ja, bin ich der Meinung, dass es nicht möglich ist eine weitere mail zu senden bevor der vorherige Vorgang abgeschlossen ist. Manchmal gehen die mails halt dann schnell genug raus und manchmal halt nicht und es kracht.

    Volker


    Und Abends ein Glas Wein von AMAVINO


    Mittwoch, 9. Mai 2012 10:18
  • Ich verwende sendasync, weil die Applikation performancekritisch ist; versuche mit einem "normalen" send hat die Geschwindigkeitswünsche des Kunden nicht zufriedengestellt (und dass ich ín der Einsatzumgebung verstehen).

    Ein "for each" verwende ich nicht.

    Wenn eine eMail an mehrere Empfänger geht, so werden diese per Semikolon getrennt in die TO-Eigenschaft des Objektes gelegt.

    Zwischen dem Versand der einzelnen Mails können mehrere Minuten/Stunden liegen.

    Vielen Dank für Deine Unterstützung,.... dafür werde ich mal einen Wein von AMAVINO aufmachen ;)

    Gernot

    Mittwoch, 9. Mai 2012 13:20
  • Hi Gernot,

    und normales send funktionierte? Was kann denn daran Zeitkritisch sein bei nur einer Mail? Wenn send funktioniert, warum erstellst Du dann nicht ganz klassisch einen neuen Thread für den Mailversand?

    Volker

    Und Abends ein Glas Wein von AMAVINO

    Mittwoch, 9. Mai 2012 13:24
  • Hallo Volker,

    ich bin nicht sicher, ob send wirklich funktioniert. Ich hatte es vor Monaten einfach mal so ausprobiert, ohne mir aber der speziellen Probelmatik bei diesem _einen_ Kunden bewußt zu sein.

    Wie gesagt, dass ganze passiert nur bei _einem_ Kunden, bei allen anderen funktioniert es top.

    ...und ich glaube nicht wirklich, dass das Problem wirklich beim asynchronen Versenden liegt....

    Gernot


    Mittwoch, 9. Mai 2012 13:31
  • Gernot,

    frag doch mal die StatusCode Eigenschaft der SMTPException ab. Eventuell findest Du dadurch den Fehler. Was laut community content auf dieser Seite auch zu Problemen führen kann, ist wenn das MailMessage object disposed wird, bevor das versenden der Email komplett beendet ist.

    Am besten wäre natürlich, wenn Du mal Deinen Code zeigen würdest, dann müssten wir nicht raten, wo evtl. der Fehler liegt.


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/


    • Bearbeitet Heslacher Mittwoch, 9. Mai 2012 13:39 link hinzugefügt
    Mittwoch, 9. Mai 2012 13:39
  • Hallo zusammen,

    werde erst morgen (Freitag) dazu kommen den Code zu posten.

    Danke für eure Unterstützung.

    Gernot

    Donnerstag, 10. Mai 2012 16:46
  • Sorry, hat ein bisschen gedauer, war leider Freitag und am Wochenende krankheitsbedingt ausgefallen.

    Nachfolgend mein Quellcode:

        Public Function CallEMail(ByVal id As Long, ByVal emailadresse As String) As Boolean
    
    
            'Variablen deklarieren
            Dim werkzeug As New clsTools
            Dim nachricht As String
            Dim userToken As New Object
    
            Dim emailbetreff As String
            Dim Absender As String
    
            emailbetreff = "Testbetreff"
            Absender = "absender@test.de"
    
    
            'Neue Nachrichtenklasse erstellen
            Dim MSG As New System.Net.Mail.MailMessage
    
            'eMailAdressen ermitteln
            Dim values As String
            values = emailadresse
            Dim eadressen As String() = Nothing
            eadressen = values.Split(";")
            Dim s As String
            For Each s In eadressen
                If checkEMail(s.ToString) = True Then
                    MSG.To.Add(New System.Net.Mail.MailAddress(s.ToString, _
                        s.ToString))
                End If
            Next
    
            'Nachrichtenklasse mit Daten füllen
            MSG.From = New System.Net.Mail.MailAddress(Absender, werkzeug.read_Single_Parameter("AbsenderName").ToString)
    
            MSG.Subject = emailbetreff
            MSG.ReplyTo = New System.Net.Mail.MailAddress(Absender, "Antwort")
    
            'Body zusammensetzen
            Dim body As String
            body = "Dies ist ein Test"
            MSG.Body = body
    
    
            'SMTP(Serverkommunikations-)Klasse erstellen
    
            Dim SMTP As New System.Net.Mail.SmtpClient(werkzeug.read_Single_Parameter("SMTP-Server").ToString, 25)
            SMTP.UseDefaultCredentials = False
            SMTP.Credentials = New System.Net.NetworkCredential("MeinBenutzer", "MeinPasswort")
    
    
            AddHandler SMTP.SendCompleted, AddressOf sendMail_SendCompleted
    
            Try
                userToken = id & emailadresse
                SMTP.SendAsync(MSG, userToken)
    
            Catch e As Exception
                MsgBox(e.Message)
            End Try
           
    
            MSG = Nothing
            SMTP = Nothing
    
        End Function
    
        Private Sub sendMail_SendCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
    
            Dim userToken As Object = e.UserState
    
            If e.Cancelled Then
                MsgBox("Email cancelled.")
            End If
    
            If e.Error IsNot Nothing Then
                Debug.WriteLine(e.Error.ToString)
            Else
                Debug.WriteLine("eMail erfolgreich versandt")
            End If
    
        End Sub

    ... bin weiterhin für jede Hilfe dankbar!

    Viele Grüße

    Gernot

    Montag, 14. Mai 2012 19:19
  • Hi Gernot,

    mir fallen da ein paar Sachen auf:

    - Deine Funktion gibt keinen wert zurück
    - was ist "id"?
    - Warum setzt Du am Ende MSG und SMTP auf Nothing? Evtl. zerstörst Du so vorher die Mail, bevor Sie überhaupt verschickt ist.

    Volker


    Und Abends ein Glas Wein von AMAVINO

    Dienstag, 15. Mai 2012 06:18
  • Hallo Volker,

    folgende Infos zu Deinen genannten Punkten:

    • Die Funktion gibt keinen Wert zurück
      Richtig, da habe ich wohl ein paar Zeilen zuviel gelöscht
    • Was ist ID
      ID ist eine interne Identifikationsnummer für diese E-Mail
    • Warum wird MSG und SMTP auf Nothing gesetzt?
      Gute Frage, aber das könnte eventuell ein Ansatzpunkt sein.
      Ich werde das mal rausnehmen. <--

    Vielen Dank, melde mich kurzfristig wieder...

    Gernot

    Dienstag, 15. Mai 2012 15:19
  • Hallo zusammen,

    nach einer Umstellung und einigen Tagen testen kann ich nun sagen, dass das Problem erledigt ist.

    Nach euren Vorschlägen habe ich das Versenden der eMails von sendasync auf "normales" Senden umgestellt.... seither läuft es ohne Probleme.

    Nur verwunderlich, dass dieses Problem nur bei einen Kunden aufgetreten ist.... aber nun ja, das ist EDV.

    Nochmals viele Dank!

    Gernot

    Donnerstag, 24. Mai 2012 14:52