从亲Asp.net书籍的例子?

时间:2011-03-11 17:25:27

标签: asp.net-mvc-2

我正在研究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行:}

3 个答案:

答案 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中运行的其他内容,则实际上并不保存它。

所以要解决它

  1. 关闭所有网页。
  2. 关闭Visual Studio
  3. 返回VS并检查Web.config文件。您会注意到它中没有mailSettings代码。
  4. 添加mailSettings代码并再次运行。它现在运行良好。

答案 2 :(得分:1)

我遇到了同样的问题并尝试了解决方案。没有任何效果。然后我看到View文件夹中有一个web.config以及根文件夹中的一个。确保您正在修改根文件夹web.config。