"未指定SMTP主机." - 但它被指定了吗?

use*_*114 23 .net c# email asp.net-mvc asp.net-mvc-5

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

未指定SMTP主机.

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

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

SmtpClient smtpClient = new SmtpClient("smtp.gmail.com");
smtpClient.Port = 587;
... etc
Run Code Online (Sandbox Code Playgroud)

但我不应该这样做,因为我想使用里面的细节mailSettings(让它可以重复用于各种不同的控制器).

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>
Run Code Online (Sandbox Code Playgroud)

我的控制器动作:

 [HttpPost]
 public ActionResult SubmitFeature(FormData formData)
 {
     SmtpClient smtpClient = new SmtpClient();

     MailMessage mail = new MailMessage();
     mail.To.Add(new MailAddress("example@gmail.com"));
     mail.Body = "Test";

     smtpClient.Send(mail);

     return View("Example");
 }
Run Code Online (Sandbox Code Playgroud)

我有什么遗漏可能导致这种情况吗?我没有搞乱Web.Config中的任何其他设置,它们在设置新的MVC5项目时也是如此.

Tom*_*mmy 27

在一个干净的MVC项目中,我无法复制您的问题.在这里ScottGu博客文章之后,我能够获得一封没有问题的Gmail邮件(VS 2013,.NET 4.5.1,MVC 5).请注意,<system.net>元素是顶级元素,而不是嵌套在AppSettings或中<system.web>.

重要

解决方案中有一些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>
Run Code Online (Sandbox Code Playgroud)

调节器

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);
Run Code Online (Sandbox Code Playgroud)

目前还不清楚你所包含的一些额外属性是否会导致问题(他们认为不应该),例如交付方式.此外,是否有允许SMTP访问的设置或仅用于IMAP/POP传送?

如果您可以在一个干净的项目中进行测试并取得成功,那么这将指向web.config转换问题或项目中的一些其他设置,这些设置会覆盖您现有的web.config设置.


Mal*_*chi 5

聊天中提到了解决方案,但从未编辑过上面的答案.

确保web.config根级别而不是在Views文件夹中进行这些设置.

@Tommy:...这看起来像是Views文件夹中的web.config而不是应用程序根目录下的web.config