SMTP-клиент .NET - у клиента нет прав для отправки в качестве этого отправителя - PullRequest
20 голосов
/ 01 сентября 2011

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

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

    MailMessage message = new MailMessage("me@mydomain.com", "friend@mydomain.com", "Test Message", "Test Body");
    client.Send(message);
}
catch (Exception ex)
{
    // Do Nothing
}

Я развернул в трех средах; в Windows 7 (с использованием VS 2010 IIS) отправляется электронная почта в порядке, на компьютере с Windows 2003 IIS6 отправляется электронная почта в порядке, наконец, на сервере 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 возвращается пустая строка.

Ответы [ 8 ]

16 голосов
/ 01 сентября 2011

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

Вы можете указать такие учетные данные, как:

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

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

6 голосов
/ 26 июля 2013

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

5 голосов
/ 17 января 2014

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

<system.net>
<mailSettings>
  <smtp from="SystemAdmin@domain.do">
    <!--network host="EXCH-SERVER" port="25" userName="userName" password="password" defaultCredentials="false" /-->
    <network host="EXCH-SERVER" port="25" />
  </smtp>
</mailSettings>

1 голос
/ 09 ноября 2016

Для меня это были разные учетные данные -

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

new NetworkCredential(smtpUser, smtpPassword)

и в fromAddress

 var fromAddress = new MailAddress("anotheruser@gmail.com", string.Empty);

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

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

                }

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

1 голос
/ 25 февраля 2016

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

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

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

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

  • defaultCredentials="false"
0 голосов
/ 07 февраля 2017

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

0 голосов
/ 02 августа 2016

У меня была такая же проблема - учетные данные из 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;

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

0 голосов
/ 01 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...