Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET SMTP客户端-客户端没有作为此发件人发送的权限_C#_.net_Asp.net Mvc_Smtp - Fatal编程技术网

C# .NET SMTP客户端-客户端没有作为此发件人发送的权限

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

当我试图通过ASP MVC3项目使用SmtpClient类发送电子邮件时,我们的服务器上出现了奇怪的情况。这是我正在使用的代码

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);
      
                      }