2009-08-06 7 views
0

Ich habe den folgenden Code unten (ich habe in xxx stecken, um den richtigen Namen nicht zu veröffentlichen). Dieser Code funktioniert einwandfrei, wenn ich auf den Server lade und E-Mails perfekt verschicke.Senden von Mail funktioniert auf dem Server, aber nicht auf meinem lokalen Rechner

 MailMessage msg = new MailMessage(); 
     msg.From = new MailAddress(fromEmailAddress_); 
     msg.To.Add(new MailAddress(toEmailAddress_)); 

     msg.Subject = subject_; 
     msg.Body = body_; 
     msg.IsBodyHtml = true; 
     msg.Priority = MailPriority.High; 

     NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential("[email protected]", "password"); 
     try 
     { 
      SmtpClient c = new SmtpClient("mail.xxx.org"); 
      c.UseDefaultCredentials = false; 
      c.Credentials = basicAuthenticationInfo; 
      c.Send(msg); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
      Console.Write(ex.Message.ToString()); 
     } 

, aber wenn ich auf meinem Rechner testen lokal in Visual Studio, erhalte ich eine Fehlermeldung:

[Socket (0x274d): keine Verbindung hergestellt werden konnte, weil der Zielcomputer 66,226 aktiv verweigert. 21.251: 25] System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) +239 System.Net.Sockets.Socket.InternalConnect (EndPoint remoteEP) +35 System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure , Sockel s4, Sockel s6, Sockel & Sockel, IPAddress & Adresse, ConnectSocketState Zustand IAsyncResult asyncResult, Int32 Timeout, Exception & exception) +224

: System.Net.ServicePoint.GetConnection (PooledStream PooledStream, Object Besitzer [WebException konnte keine Verbindung zum Remote-Server verbinden], Boolean async, IPAddress & Adresse, Socket & abortSocket, Socket & abortSocket6, Int32 timeout) 5.420.699 System.Net.PooledStream.Activate (Object owningObject, Boolean async, Int32 Timeout, GeneralAsyncDelegate AsyncCallback) +202 System.Net.PooledStream. Aktivieren Sie (Object owningObject, GeneralAsyncDelegate asyncCallback) +21 System.Net.ConnectionPool.GetConnection (Object OwningObject, AllgemeinAsyncDelegate asyncCallback, Int32 creationTimeout) +332 System.Net.Mail.SmtpConnection.GetConnection (String-Host, Int32-Port) +160 System.Net.Mail.SmtpTransport.GetConnection (String-Host, Int32-Port) +159

irgendwelche Vorschläge, warum dies nicht funktionieren würde

Antwort

2

Das erste, was ich tun würde, um dies auszuführen, ist zu sehen, ob der Zielrechner, wie die Fehlermeldung sagt, die Verbindungen tatsächlich ablehnt. Ich kann von hier aus eine Verbindung zu Port 25 für diese IP-Adresse herstellen, daher ist es möglich, dass Ihre Fehlermeldung irreführend ist.Diese sind alle möglichen Ursachen eines Ausfalls zu verbinden:

  • gibt es ein Problem in Ihrem Code
  • gibt es ein Problem in der Bibliothek Sie verwenden
  • Sie haben eine lokale Firewall verhindert Outbound-E-Mails von seltsamen Programme
  • ISP außer auf ihren eigenen Servern
  • einige Zwischennetz blockiert Dinge
  • der ISP SMTP-Verbindungen blockiert Mail-Server von yo nicht ausgehenden SMTP-Verbindungen zulassen ur Netzwerk
  • der Mail-Server, den Sie wirklich ablehnt, vielleicht, weil Sie auf eine Blockliste sind

, um mehr Einzelheiten Download zu erhalten und installieren Wireshark. Es ist wie ein Debugger für Netzwerke. Starten Sie eine Erfassung zwischen Ihrem System und dem Zielnetzwerk und führen Sie dann Ihren Code aus. Das Interpretieren der erfassten Pakete erfordert einige Erfahrung. Wenn Sie also stecken bleiben, können Sie hier mehr Daten posten.

0

der Anbieter hat wahrscheinlich ihre Mail-Server die Firewall gesperrt, so dass es nur E-Mails von ihrem Hosting-Umgebung zu akzeptieren ist.

Ändern Sie es, um Ihren lokalen Mail-Server zu verwenden, wenn Sie es lokal testen.

+0

kommt Windows XP mit einer Art von Mail-Server, den ich lokal zum Testen verwenden kann? – leora

+0

Verwenden Sie einfach den Server Ihres ISP, der in Ihrem Mail-Client konfiguriert ist. – caf

1

Relay-Einschränkungen verhindern sehr wahrscheinlich, dass Sie E-Mails von außerhalb eines zulässigen IP-Satzes senden. Wenn der SMTP-Server auf einem Web-/Anwendungsserver konfiguriert ist, ist er wahrscheinlich so eingerichtet, dass E-Mails nur über die Adresse 127.0.0.1 gesendet werden können.

Sie können einen lokalen SMTP-Server über den IIS-Manager konfigurieren. Wenn Sie diesen Pfad verwenden, stellen Sie sicher, dass Port 25 auf Ihrem lokalen Computer geöffnet ist. Oftmals blockiert/überwacht der Anti-Virus-Typ diesen Port und es wird mit der E-Mail-Zustellung gemuckt.

0

Überprüfen Sie, ob Ihr Antivirus verrückt wird, ich habe dieses Problem ein paar Mal mit Leuten gesehen, die Mcafee laufen.

Hoffe, das hilft.

1

Ich denke, Sie verwenden nicht die Portnummer in Ihrem Code. Benutze diese Zeilen, Dann sollte die Mail auch lokal sein.

smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 
    smtp.Timeout = 60000; 
    smtp.Port = 25; 

Dies funktioniert auf meinem System. Ich hoffe, es wird auch auf Ihrem lokalen System funktionieren.