C# .NET SMTP客户端-客户端没有作为此发件人发送的权限
当我试图通过ASP MVC3项目使用SmtpClient类发送电子邮件时,我们的服务器上出现了奇怪的情况。这是我正在使用的代码C# .NET SMTP客户端-客户端没有作为此发件人发送的权限,c#,.net,asp.net-mvc,smtp,C#,.net,Asp.net Mvc,Smtp,当我试图通过ASP MVC3项目使用SmtpClient类发送电子邮件时,我们的服务器上出现了奇怪的情况。这是我正在使用的代码 try { var client = new SmtpClient("MailServer"); client.UseDefaultCredentials = true; MailMessage message = new MailMessage("me@mydomain.com", "friend@mydomain.com", "Test M
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
时,它返回的是一个空字符串。User.Identity.IsAuthenticated返回什么,如果它返回false,那就是您的问题。您正试图以未经身份验证的用户身份发送邮件。邮件服务器可能不支持发送匿名电子邮件,需要指定在邮件服务器上注册的凭据
您可以这样指定凭据:
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("username", "password");
希望这有帮助。如果您使用的是exchange服务器,并且登录帐户和发件人电子邮件不同,则会出现错误“无权发送…”。这是因为帐户权限。您必须向登录帐户授予“发送为”权限。我解决了从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>
如果您尝试了所有方法,但仍然失败,那么服务器可能只接受匿名用户。如果您尝试使用凭据连接:
defaultCredentials=“true”
defaultCredentials=“false”userName=“foo”password=“false”
.NET SMTP客户端-客户端没有作为此发件人发送的权限
这很奇怪,但作为最后手段,请尝试以下简单方法:
defaultCredentials=“false”
- 也有同样的问题-来自ASP.Net的凭据永远不会成为在我的环境中发送电子邮件的东西。因此,我在混乱中找到了这条路径(这还包括NTLM不总是正常工作的可能性,以及我将邮件配置信息放在web.config中的可能性):
根据您的配置,您可能需要取消最后一行的注释。对我来说,它使用了不同的凭据- 在我使用的网络凭据中-
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);
}
简单的解决方法是将这两封邮件与网络凭据的邮件保持一致 使用Visual studio 2013运行包对我来说有一件事很有效。
我删除了SMTP连接管理器编辑器中的“使用Windows身份验证”标记。奇怪,如果您的身份名为空,请尝试禁用匿名帐户,并让web应用模拟某个用户并查看其是否工作。您好,如果我替换为以下内容:client.usedaultcredentials=false;client.Credentials=新的网络凭据(“myAccount”、“myPassword”、“myDomain”);电子邮件通过fine.ok发送,但我不会在代码中添加pwd和用户名,至少使用web配置!你可能想看看这个问题和answe:嗨,我已经看了那个问题,但我不确定它是否相关。顺便说一句,代码中的pwd/用户名仅用于测试;)嗨,它返回false。我怎样才能回到现实呢?据我所知,Windows身份验证已启用。在web.config中,我有以下内容,您还需要禁用匿名身份验证。我通常通过IIS管理GUI而不是web.config在IIS级别执行此操作。在本例中,User.Identity.Name是一个空字符串,我希望它为null。在IIS7 GUI中,我已禁用匿名身份验证、ASP.NET模拟和表单身份验证。仅启用了Windows身份验证。您好,但是当我在我的开发人员计算机或其他服务器上时,我可以使用邮件服务器而不提供网络凭据。我只是在Win2008服务器上遇到问题。@StriclySocial-用于应用程序池标识的配置帐户是否可能缺少足够的权限?目前它设置为ApplicationPoolIdentity-我必须承认,当它在IIS中达到此级别时,我是lost@StrictlySocial-您需要为应用程序池(ApplicationPoolIdentity)指定一个帐户,该帐户具有使用邮件服务器发送电子邮件的必要权限,或者将您的邮件服务器配置为允许在当前状态下从web服务器向邮件服务器发送电子邮件。@StriclySocial-您的帐户可能是一个域帐户,而NetworkService和ApplicationPoolIdentity帐户则不是。您可以创建一个受限域帐户以运行应用程序池,或者我确信可以将SMTP服务器配置为允许未经身份验证的电子邮件根据其IP地址从web服务器发送。谢谢,这很有帮助。看起来这里有一篇关于如何授予权限的文章-。请注意,要做到这一点,您需要访问广告和邮件服务器,这并不总是可用的。我也有同样的问题。身份验证失败,因为发件人地址与网络凭据不同。有办法解决这个问题吗?请引导。完全相同的问题。谢谢你。很惊讶没有提到修复。
using (var message = new System.Net.Mail.MailMessage(fromAddress, toAddress)
{
Subject = Keys.MailSubject,
Body = body,
IsBodyHtml = true
})
{
smtp.Send(message);
}