2009-09-29 3 views
7

Я не могу отправлять электронные письма на внешние доменные адреса, такие как '[email protected]', используя код ниже.Невозможно отправить электронную почту во внешний домен с помощью SMTP

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

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

я получаю исключение -

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

Если я изменить DeliveryMethod к -

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

Я могу отправить электронную почту на моей локальной машине. Но он не на месте производства с исключением -

Cannot get IIS pickup directory

Можете ли вы предложить мне что делать?

+0

Было ли это когда-либо разрешено? У меня такое же поведение. – Kevin

+0

нашли решение? –

ответ

1

Обычно вам необходимо выполнить аутентификацию с помощью внешнего почтового сервера с использованием имени пользователя/пароля. Поскольку вы используете внешний сервер, это не будет знать ваши учетные данные. Это может быть вашей проблемой.

1

Если вы должны были найти запись MX для адреса назначения (в вашем примере это asdf.com), а затем использовать это для свойства хоста SmtpClient, оно должно быть должно принять сообщение для доставки без аутентификации так как это относится к локальному пользователю. Это непросто сделать, поскольку System.Net не предоставляет управляемый класс DNS, который может возвращать записи MX, но вы можете P/вызвать неуправляемый код для этого. В противном случае вам нужно будет убедиться, что любой SMTP-сервер, к которому вы подключаетесь, будет ретранслировать вас, а затем установить для свойства Credentials для SmtpClient соответствующие учетные данные для подключения к этому серверу. Установка метода DeliveryMethod в PickupDirectoryFromIIS по-прежнему записывает только файл в каталог пикажа IIS, поэтому он записывает только файл, он не выполняет фактическую отправку.

+0

+1 за то, что вы знаете, как работает электронная почта. Кроме того, имейте в виду, что вам могут понадобиться другие вещи, помимо отправки непосредственно на сервер для этого домена (поиск MX). В основном из-за защиты от спама в мире электронной почты существует множество правил. Найдите «Идентификатор отправителя», «SPF» и «Заголовок отправителя SMTP», чтобы вы начали - для тех, кто хочет пойти по этому маршруту. – eselk

4

Я имел этот вопрос и аутентификация фик его увидеть ниже:

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

я должен был использовать двойной слэш, так как один слэш маскирующие так использовать два для его работы.

0

Я столкнулся с этой проблемой, которую я решил, добавив домен с «* .com» в качестве имени домена и напечатав как «удаленный», в разделе «Виртуальный сервер/домены» IIS 6.0 Manager/SMTP.

Хотя в моем случае сервер SMTP допускал анонимный доступ.