我正在研究Pro Asp.Net上的partyInvities(第一个asp.net mvc应用程序)示例。
当我尝试向聚会组织者发送电子邮件时,我收到一条错误消息,指出未指定smtp主机。我该怎么做对吗?这是我的代码和错误。
//code guestresponse
public class GuestResponse
{
[Required(ErrorMessage="* Please Enter Your Name")]
public string Name { get; set; }
[Required(ErrorMessage="* Please Enter Your Email Id")]
[RegularExpression(".+\\@.+\\...+",ErrorMessage=" * Please Enter Valid Email Id")]
public string Email {get; set; }
[Required(ErrorMessage = "* Please Enter Your Phone Number")]
public string Phone { get; set; }
[Required(ErrorMessage = "* Please Specify Whether You Will Attend or Not")]
public bool? WillAttend { get; set; }
private MailMessage BuildMailMessage()
{
var message = new StringBuilder();
message.AppendFormat("Date: {0: yyyy-MM-dd hh:mm}\n", DateTime.Now);
message.AppendFormat("RSVP from : {0}\n", Name);
message.AppendFormat("Email: {0}\n", Email);
message.AppendFormat("Phone: {0}\n", Phone);
message.AppendFormat("Can Come: {0}\n", WillAttend.Value ? "yes" : "No");
return new MailMessage(
"rsvps@example.com", "party@example.com", Name + (WillAttend.Value ? "will attend" : "Won't attend"), message.ToString()); //From, To, Subject, Body
}
public void Submit()
{
using (var smtpClient= new SmtpClient())
using (var mailMessage = BuildMailMessage())
{
smtpClient.Send(mailMessage);
}
}
}
// web config
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="smtp.example.com"/>
</smtp>
</mailSettings>
</system.net>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
//错误
>'/'应用程序中的服务器错误。未指定SMTP主机。 描述:执行期间发生未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。异常详细信息:System.InvalidOperationException:SMTP主机是 未指定。
来源错误:
第49行:{
第50行:smtpClient.Send(mailMessage);
第51行:} 第52行:
第53行:}
答案 0 :(得分:3)
我怎么能做对吗?
为了能够发送电子邮件,您需要一个SMTP服务器。如果您没有设置SMTP服务器,可以进行调试,请在web.config中添加以下内容:
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\email"/>
<network host="localhost"/>
</smtp>
</mailSettings>
</system.net>
现在,所有电子邮件都将存储在c:\emails
文件夹中,而不是发送给您,以便您可以检查代码是否正常运行。
就配置真正的SMTP服务器而言,这是一个您可能会在Serverfault上提出的问题,因为它与StackOverflow无关。
答案 1 :(得分:2)
我有同样的问题并且能够解决它。问题是当您更改Web.config中的代码并保存它时,如果您仍然运行带有错误消息的Web页面以及可能在Visual Studio中运行的其他内容,则实际上并不保存它。
所以要解决它
答案 2 :(得分:1)
我遇到了同样的问题并尝试了解决方案。没有任何效果。然后我看到View文件夹中有一个web.config以及根文件夹中的一个。确保您正在修改根文件夹web.config。