我在这里有些困惑 - 我收到以下错误:
未指定SMTP主机。
即使我的代码看起来是正确的(我可以看到)。
我可以通过在控制器内部包含所有细节来手动完成,例如
SmtpClient smtpClient = new SmtpClient("smtp.gmail.com");
smtpClient.Port = 587;
... etc
但我不应该这样做,因为我想使用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>
我的控制器操作:
[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项目时一样。
答案 0 :(得分:25)
在干净的MVC项目中,我无法复制您的问题。在ScottGu blog post here之后,我能够获得一封没有问题的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>
<强>控制器强>
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设置。< / p>
答案 1 :(得分:5)
答案 2 :(得分:0)