Benutzer mit den meisten Antworten
Gelegentlicher Fehler beim Senden von eMails (Fehlermeldung im Text)

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 ErgebnisTja, und da bin ich nun mit meinem Latein am Ende....
Freue mich über jede Unterstützung.
Gernot
- Bearbeitet Gernot Pfeifer Dienstag, 8. Mai 2012 09:59
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?
VolkerUnd Abends ein Glas Wein von AMAVINO
- Als Antwort markiert Gernot Pfeifer Donnerstag, 24. Mai 2012 14:50
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/ -
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
-
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).
VolkerUnd Abends ein Glas Wein von AMAVINO
-
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
-
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
- Bearbeitet Volker Straehle 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
-
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?
VolkerUnd Abends ein Glas Wein von AMAVINO
- Als Antwort markiert Gernot Pfeifer Donnerstag, 24. Mai 2012 14:50
-
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
- Bearbeitet Gernot Pfeifer Mittwoch, 9. Mai 2012 13:32
-
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
-
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
-
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.
VolkerUnd Abends ein Glas Wein von AMAVINO
-
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
- Die Funktion gibt keinen Wert zurück
-
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