2009-09-29 3 views
7

Nie mogę wysyłać wiadomości e-mail na adresy domen zewnętrznych, takich jak "[email protected]", korzystając z poniższego kodu.Nie można wysyłać wiadomości e-mail do domeny zewnętrznej za pomocą protokołu SMTP

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

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

uzyskać wyjątek -

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

jeśli zmienię DeliveryMethod do -

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

jestem w stanie wysyłać e-maile na moim komputerze lokalnym. Ale to nie w miejscu produkcji z wyjątkiem -

Cannot get IIS pickup directory

można zasugerować mi, co mam robić?

+0

Czy to się kiedykolwiek udało? Mam dokładnie to samo zachowanie. – Kevin

+0

znalazł jakieś rozwiązanie? –

Odpowiedz

1

Zazwyczaj konieczne jest uwierzytelnienie za pomocą zewnętrznego serwera pocztowego przy użyciu nazwy użytkownika/hasła. Ponieważ korzystasz z zewnętrznego serwera, nie będziesz znać poświadczeń, które przekazujesz. To może być twój problem.

1

Jeśli chcesz wyszukać rekord MX dla adresu docelowego (w twoim przykładzie jest to asdf.com), a następnie użyć go dla właściwości hosta SmtpClient, to powinien zaakceptować wiadomość do dostarczenia bez uwierzytelnienia ponieważ jest to użytkownik lokalny. Nie jest to łatwe, ponieważ System.Net nie zapewnia zarządzanej klasy DNS, która może zwracać rekordy MX, ale można P/wywołać niezarządzany kod, aby to zrobić. W przeciwnym razie będziesz musiał upewnić się, że jakikolwiek serwer SMTP, z którym się łączysz, przekaże dla ciebie, a następnie ustaw właściwość Credentials SmtpClient na odpowiednie poświadczenia do połączenia z tym serwerem. Ustawienie DeliveryMethod na PickupDirectoryFromIIS nadal zapisuje tylko plik w katalogu pobrań IIS, więc tylko zapisuje plik, nie wykonuje faktycznego wysyłania.

+0

+1 za poznanie sposobu działania poczty e-mail. Pamiętaj też, że oprócz wysyłania bezpośrednio do serwera w tej domenie możesz potrzebować innych rzeczy (wyszukiwanie MX). Głównie ze względu na ochronę antyspamową w świecie wiadomości e-mail istnieje wiele reguł. Wyszukaj "Identyfikator nadawcy", "SPF" i "Nagłówek nadawcy SMTP", aby zacząć - dla każdego, kto chce iść tą trasą. – eselk

4

miałem ten problem i uwierzytelnianie stałe to zobaczyć poniżej:

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

musiałem użyć ponieważ jeden podwójny ukośnik ukośnik jest znakiem ucieczki więc używać dwóch do jego pracy.

0

Stawiłem czoła temu problemowi, który rozwiązałem, dodając domenę z "* .com" jako nazwą domeny i typem "zdalnym", w Menedżerze IIS 6.0/wirtualnym serwerze/serwerach SMTP.

Chociaż w moim przypadku serwer SMTP zezwolił na anonimowy dostęp.