Подтвердить что ты не робот

.NET SMTP Client - у клиента нет разрешений на отправку в качестве этого отправителя

Я получаю странное присутствие на наших серверах, когда пытаюсь отправить электронное письмо с использованием класса SmtpClient через проект ASP MVC3. Это код, который я использую.

try
{
    var client = new SmtpClient("MailServer");
    client.UseDefaultCredentials = true;

    MailMessage message = new MailMessage("[email protected]", "[email protected]", "Test Message", "Test Body");
    client.Send(message);
}
catch (Exception ex)
{
    // Do Nothing
}

Я развернулся в трех средах; в Windows 7 (с использованием VS 2010 IIS) он отправляет письмо в порядке, на машине IIS6 Windows 2003 он отправляет письмо в порядке, наконец, на сервере Windows 2008 R2 II7 появляется следующая ошибка:

Mailbox unavailable. The server response was: 5.7.1 Client does not have permissions to send as this sender using username 

Может кто-нибудь посоветовать, что может быть причиной этого. Я заметил, что при просмотре User.Identity.Name это возвращает пустую строку.

4b9b3361

Ответ 1

Вероятно, почтовый сервер не поддерживает отправку анонимных писем и потребует указать учетные данные, которые зарегистрированы на почтовом сервере.

Вы можете указать учетные данные следующим образом:

client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("username", "password");

Надеюсь, что это поможет.

Ответ 2

Если вы используете сервер обмена, а учетная запись входа и отправитель электронной почты разные, вы получите сообщение об ошибке "У вас нет прав на отправку...". Это связано с разрешениями учетной записи. Вы должны предоставить разрешение "отправить как" учетной записи входа.

Ответ 3

Я решаю эту проблему, удаляя учетные данные для проверки подлинности из web.config

<system.net>
<mailSettings>
  <smtp from="[email protected]">
    <!--network host="EXCH-SERVER" port="25" userName="userName" password="password" defaultCredentials="false" /-->
    <network host="EXCH-SERVER" port="25" />
  </smtp>
</mailSettings>

Ответ 4

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

  • defaultCredentials="true"
  • defaultCredentials="false" userName="foo" password="false"

Затем сервер вернет ошибку .NET SMTP Client - Client does not have permissions to send as this sender.

Это странно, но в крайнем случае просто попробуйте просто:

  • defaultCredentials="false"

Ответ 5

Что возвращает User.Identity.IsAuthenticated, если он возвращает false, что является вашей проблемой. Вы пытаетесь отправить почту как не прошедший проверку пользователя.

Ответ 6

Имела ту же проблему - учетные данные из ASP.Net никогда не собирались быть тем, что могло отправлять электронную почту в моей среде. Поэтому я понял этот путь через беспорядок (что также включает в себя возможность того, что NTLM не всегда работает правильно и что я помещаю информацию о конфигурации почты в web.config):

System.Net.Configuration.SmtpSection section = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as System.Net.Configuration.SmtpSection;

// set up SMTP client
SmtpClient smtp = new SmtpClient();
System.Net.CredentialCache myCache = new System.Net.CredentialCache();
NetworkCredential myCred = new NetworkCredential(section.Network.UserName, section.Network.Password);
string host = section.Network.Host;
int port = section.Network.Port;

// do this because NTLM doesn't work in all environments....
if (myCred != null)
{
    myCache.Add(host, port, "Digest", myCred);
    myCache.Add(host, port, "Basic", myCred);
    myCache.Add(host, port, "Digest-MD5", myCred);
    myCache.Add(host, port, "Digest MD5", myCred);
    myCache.Add(host, port, "Plain", myCred);
    myCache.Add(host, port, "Cram-MD5", myCred);
    myCache.Add(host, port, "Cram MD5", myCred);
    myCache.Add(host, port, "Login", myCred);

    //myCache.Add(host, port, "NTLM", myCred);
}
smtp.Credentials = myCache;
smtp.UseDefaultCredentials = false;
//smtp.EnableSsl = true;

В зависимости от вашей конфигурации вам может потребоваться раскомментировать последнюю строку.

Ответ 7

Для меня он использовал разные учетные данные -

В сетевых учетных данных, которые я использовал -

new NetworkCredential(smtpUser, smtpPassword)

и from fromAddress

 var fromAddress = new MailAddress("[email protected]", string.Empty);

Если при отправке электронной почты, где fromAddress отличается от фактических сетевых учетных данных, это приведет к этой проблеме. См. Ниже -

 using (var message = new System.Net.Mail.MailMessage(fromAddress, toAddress)
                {
                    Subject = Keys.MailSubject,
                    Body = body,
                    IsBodyHtml = true
                })
                {
                    smtp.Send(message);

                }

Простое исправление заключается в том, чтобы сохранить как почтовые сообщения такими же, как сетевые учетные данные.

Ответ 8

Одна вещь работала для меня с использованием готовых пакетов Visual Studio 2013. я удалил тег "Использовать проверку подлинности Windows" в редакторе диспетчера подключений SMTP.