“未指定SMTP主机。” – 但是已指定?

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

未指定SMTP主机。

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

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

SmtpClient smtpClient = new SmtpClient("smtp.gmail.com"); smtpClient.Port = 587; ... etc 

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

我的Web.Config文件中的mailSettings

        

我的控制器动作:

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

有什么我想念的可能导致这种情况吗? 我没有搞乱Web.Config中的任何其他设置,它们就像设置新的MVC5项目时一样。

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

重要

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

Web.Config中

           

调节器

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

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

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

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

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

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