C# &引用;未指定SMTP主机。";-但具体是什么?

C# &引用;未指定SMTP主机。";-但具体是什么?,c#,.net,asp.net-mvc,email,asp.net-mvc-5,C#,.net,Asp.net Mvc,Email,Asp.net Mvc 5,我在这里有点困惑-我收到了以下错误: 未指定SMTP主机 即使我的代码看起来是正确的(从我所看到的) 我可以通过包括控制器内部的所有细节来手动完成,例如 SmtpClient smtpClient = new SmtpClient("smtp.gmail.com"); smtpClient.Port = 587; ... etc 但我不应该这样做,因为我想使用邮件设置中的详细信息(使其可用于各种不同的控制器) mailSettings在我的Web.Config文件中: <system.n

我在这里有点困惑-我收到了以下错误:

未指定SMTP主机

即使我的代码看起来是正确的(从我所看到的)

我可以通过包括控制器内部的所有细节来手动完成,例如

SmtpClient smtpClient = new SmtpClient("smtp.gmail.com");
smtpClient.Port = 587;
... etc
但我不应该这样做,因为我想使用
邮件设置
中的详细信息(使其可用于各种不同的控制器)

mailSettings
在我的
Web.Config
文件中:

<system.net>
   <mailSettings>
     <smtp from="example@gmail.com" deliveryMethod="Network" >
       <network host="smtp.gmail.com" defaultCredentials="true" 
                port="587" enableSsl="true" userName="example@gmail.com"
                password="example"/>
     </smtp>
   </mailSettings>
</system.net>

我遗漏了什么可能是原因吗?我没有弄乱Web.Config中的任何其他设置,它们与设置新的MVC5项目时一样。

在干净的MVC项目中,我无法复制您的问题。之后,我能够收到一封没有问题的gmail电子邮件(VS 2013,.NET 4.5.1,MVC 5)。注意
元素是顶级元素,不嵌套在
AppSettings

重要

解决方案中有几个web.config文件,请确保将
mailSettings
插入根级别的web.config(而不是位于Views文件夹中的文件)

Web.Config

<configuration>
  <system.net>
    <mailSettings>
      <smtp from="myEmail@gmail.com">
        <network host="smtp.gmail.com" 
                 port="587" 
                 enableSsl="true" 
                 userName="myEmail@gmail.com" 
                 password="SuperSecretPwd" 
                 defaultCredentials="false" /> <!--This must be false on Gmail-->
      </smtp>
    </mailSettings>
  </system.net>
</configuration>
目前还不清楚您包含的一些额外属性是否导致了交付方法等问题(虽然它们不应该)。另外,是否有允许SMTP访问的设置,还是仅用于IMAP/POP传递


如果您可以在一个干净的项目中进行测试并获得成功,那么这将表明web.config转换问题或项目中的某些其他设置覆盖了您已有的web.config设置。

解决方案在中提到,但从未编辑到上述答案中

确保在根级别的
web.config
中进行这些设置,而不是在“视图”文件夹中

@汤米:


你有没有可能把它添加到“Release.Web.Config”而不是实际的Web.Config?@flaviotsf-Nope,它在Web.Config里面。我应该在其他地方使用控制器内的Web配置进行引用吗?我相信您应该将
defaultCredentials
更改为
false
,以使用提供的凭据进行身份验证。@WiktorZychla我在更改后收到完全相同的错误sadlyHello,我实际上能够发送电子邮件,但是,我必须在控制器内指定属性(例如端口、enableSsl)。
Web.Config
文件似乎根本没有任何效果。当我更改
新SmtpClient()时到新的SmtpClient(“smtp.gmail.com”)
,我实际上收到了一个不同的错误——“必须指定一个发件人地址”,这让我觉得
Web.Config
文件甚至没有被识别?@user2945993-这就是我要说的。我可以在web.config中设置它,它可以正常工作。你能在一个新的/干净的项目中尝试我上面发布的代码吗?您是否仍然存在这些问题?@user2945993您是否100%确定这些值没有被web.config转换覆盖?您是在本地调试还是发布到服务器?我不确定它们是否被覆盖-现在只是测试一个新项目,并会让您知道。@user2945993-很好。从字面上复制我上面的代码并替换必要的值。另外,
是顶级web.configuration元素。确保没有将其埋在其他元素下(如system.web或appSettings内部)
<configuration>
  <system.net>
    <mailSettings>
      <smtp from="myEmail@gmail.com">
        <network host="smtp.gmail.com" 
                 port="587" 
                 enableSsl="true" 
                 userName="myEmail@gmail.com" 
                 password="SuperSecretPwd" 
                 defaultCredentials="false" /> <!--This must be false on Gmail-->
      </smtp>
    </mailSettings>
  </system.net>
</configuration>
var smtpClient = new SmtpClient();
var msg = new MailMessage();
msg.To.Add("MyOtherAddress@yahoo.com");
msg.Subject = "Test";
msg.Body = "This is just a test email";
smtpClient.Send(msg);