Elmah не работает с Gmail для MVC 3

Я использую ELMAH для своего приложения MVC 3 с Gmail. Я использовал несколько ссылок о том, как это сделать, в том числе Этот вопрос StackOverflow, в котором содержится несколько исправлений

Я все еще не могу определить, почему я не получаю электронные письма от elmah. Я пытаюсь проверить это, выбрасывая исключение NullReferenceException в вызываемый мной код.

Мой web.config выглядит следующим образом:

     <configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
    <sectionGroup name="elmah">
      <section name="errorMail" requirePermission="false"  type="Elmah.ErrorMailSectionHandler, Elmah"/>
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>
  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
    </httpHandlers>
    <httpModules>
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
    </httpModules>

    <!--
        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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
      </pages>
      </system.web>
      <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network host="smtp.gmail.com" port="587" userName="[email protected]" password="myPassword"/>
      </smtp>
    </mailSettings>
    </system.net>
    <elmah>
    <errorMail   from="[email protected]" to="[email protected]" subject="Error" async="true" smtpPort="587"       useSsl="true"/>
    </elmah>
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

      <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"    type="System.Web.HttpNotFoundHandler" />
      <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd"      type="Elmah.ErrorLogPageFactory, Elmah"/>
    </handlers>

    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </modules>
    </system.webServer>
    </configuration>

Есть идеи, почему это может не работать?


person TheJediCowboy    schedule 06.10.2011    source источник
comment
Глупый вопрос, но должен спросить - вы проверили спам-фильтр Gmail? Я часто забываю туда смотреть, но иногда это бывает агрессивно.   -  person Ken Pespisa    schedule 06.10.2011
comment
Нет такой вещи, как глупый вопрос! При этом я проверил, но не повезло = (у меня заканчиваются идеи! Спасибо за комментарий!   -  person TheJediCowboy    schedule 07.10.2011


Ответы (1)


РЕДАКТИРОВАТЬ: Это может быть не всегда верно при рассмотрении других конфигураций ELMAH, но вы все равно можете попробовать это. Кроме того, я знаю, что атрибут enableSSL в настройках почты system.net является новым в .NET 4.0 - вы можете также добавить enableSSL=true в этот раздел, поскольку GMail действительно использует SSL для подключения.

Похоже, вы оставили свойство конфигурации вашего хоста и несколько других параметров вне своих настроек ELMAH для электронной почты при сравнении вашей настройки с настройками других конфигураций ELMAH. Я не думаю, что ELMAH смотрит на настройки почты system.net, а скорее на собственный тег errorMail

Этот:

<elmah>
    <errorMail 
      from="[email protected]"
       to="[email protected]"
       subject="Error"
       async="true"
       smtpPort="587"
       useSsl="true"/>
    </elmah>

Следует изменить на это:

<elmah>
    <errorMail 
      from="[email protected]"
       to="[email protected]"
       subject="Error"
       async="true"
       smtpPort="587"
       useSsl="true"
       host="smtp.gmail.com"
       userName="[email protected]"
       password="myPassword"/>
    </elmah>
person Tommy    schedule 06.10.2011
comment
В ‹errorMail› установите для атрибута smtpPort значение 0. Это приведет к тому, что вместо этого ELMAH будет использовать порт, определенный в настройках ‹system.net›. - person AhsenBaig; 02.11.2011
comment
должен ли атрибут хоста быть smtpServer? - person Scott Coates; 03.03.2012
comment
Я не уверен, что именно помогло, но я целый день изо всех сил пытался заставить elmah отправлять электронную почту через SES, и использование ваших настроек сработало для меня! Спасибо! - person Avalanchis; 21.05.2014
comment
У меня сработали настройки почты Elmah. У меня есть веб-приложение и служба Windows, для которой я использую Elmah. Мы также не пересылаем электронную почту. Я добавил настройки почты в узел конфигурации elmah в обоих, и они оба начали работать. - person Brandon Lewis; 06.03.2017