пример из про книгу Asp.net? - PullRequest
1 голос
/ 11 марта 2011

Я работаю над примером partyInvities (первое приложение asv.net mvc) в книге Pro Asp.Net.

Когда я пытаюсь отправить электронное письмо организатору вечеринки, появляется сообщение о том, что хост 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);
         }

     }


     }

// веб-конфигурация

<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 ]

3 голосов
/ 11 марта 2011

как я могу сделать это правильно?

Для того, чтобы иметь возможность отправлять электронную почту, вам нужен 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.

2 голосов
/ 22 октября 2011

У меня была такая же проблема, и я смог ее решить. Проблема заключается в том, что когда вы изменяете код в файле Web.config и сохраняете его, он фактически не сохраняется, если у вас по-прежнему работают веб-страницы с сообщением об ошибке, а также, возможно, другие компоненты, работающие в Visual Studio.

Так что починить

  1. Закройте все веб-страницы.
  2. Закрыть Визуальная студия
  3. Вернитесь в VS и проверьте файл Web.config. Вы заметите, что в нем нет кода mailSettings.
  4. Добавьте код mailSettings и запустите его снова. Теперь он будет работать нормально.
1 голос
/ 04 сентября 2013

У меня была такая же проблема, и я попробовал решения здесь Ничего не получалось. Затем я увидел, что в папке View есть файл web.config, а также в корневой папке. Убедитесь, что вы изменяете корневую папку web.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...