2009-09-29 8 views
7

Ich kann keine E-Mails an externe Domänenadressen wie "[email protected]" mit dem folgenden Code senden.Senden von E-Mails an externe Domäne über SMTP nicht möglich

SmtpClient smtpClient = new SmtpClient(smtpMailServer); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.EnableSsl = true; 

//Sending mail. 
smtpClient.Send(mailMessage); 

Ich erhalte eine Ausnahme -

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for [email protected]

Wenn ich die deliveryMethod ändern -

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

Ich bin in der Lage, die E-Mails auf meinem lokalen Rechner zu senden. Aber es scheitert an der Produktionsstätte mit einer Ausnahme -

Cannot get IIS pickup directory

Können Sie mir empfehlen, was zu tun?

+0

Wurde das jemals gelöst? Ich habe genau das gleiche Verhalten. – Kevin

+0

keine Lösung gefunden? –

Antwort

1

Normalerweise müssen Sie sich mit dem externen Mailserver mit einem Benutzernamen/Passwort authentifizieren. Da Sie einen externen Server verwenden, kennt dieser die Anmeldeinformationen nicht. Dies könnte Ihr Problem sein.

1

Wenn Sie den MX-Eintrag für die Zieladresse zu sehen sind (in Ihrem Beispiel, es asdf.com ist) und dann, dass der SmtpClient für die Host-Eigenschaft zu verwenden, es sollte die Nachricht ohne Authentifizierung für die Lieferung übernehmen da es sich um einen lokalen Benutzer handelt. Dies ist nicht einfach, da System.Net keine verwaltete DNS-Klasse zur Verfügung stellt, die MX-Einträge zurückgeben kann, aber Sie können P/unmanaged Code aufrufen, um dies zu tun. Andernfalls müssen Sie sicherstellen, dass der SMTP-Server, mit dem Sie eine Verbindung herstellen, für Sie weitergeleitet wird, und legen Sie dann die Credentials-Eigenschaft von SmtpClient auf die entsprechenden Anmeldeinformationen für die Verbindung mit diesem Server fest. Wenn Sie DeliveryMethod auf PickupDirectoryFromIIS festlegen, wird nur eine Datei in das IIS-Pickup-Verzeichnis geschrieben, sodass nur eine Datei geschrieben wird und kein tatsächlicher Sendevorgang ausgeführt wird.

+0

+1 für das Wissen, wie E-Mail funktioniert. Denken Sie auch daran, dass Sie möglicherweise andere Dinge tun müssen, als nur direkt an den Server für diese Domäne zu senden (MX-Suche). Vor allem aufgrund des Anti-Spam-Schutzes gibt es in der E-Mail-Welt viele Regeln. Suchen Sie nach "Absender-ID", "SPF" und "SMTP-Absender-Header", um einen Einstieg zu erhalten - für alle, die diese Route nutzen möchten. – eselk

4

hatte ich dieses Problem und Authentifizieren es unten sehen fixed:

 SmtpClient client = new SmtpClient(EmailServer, 25); 
     var SmtpUser = new System.Net.NetworkCredential("domain\\username", "password"); 
     client.Credentials = SmtpUser; 
     client.DeliveryMethod = SmtpDeliveryMethod.Network; 

ich den doppelten Schrägstrich seit einem Schrägstrich ist so die Flucht verwenden musste Charakter zwei verwenden, damit es funktioniert.

0

Ich konfrontiert dieses Problem, das ich gelöst, indem ich eine Domäne mit "* .com" als Domänenname und Typ als "remote", unter IIS 6.0 Manager/SMTP Virtual Server/Domains hinzugefügt.

Obwohl in meinem Fall der SMTP-Server anonymen Zugriff erlaubt.

Verwandte Themen