.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
это возвращает пустую строку.
Ответы
Ответ 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.