【问题标题】:Elmah not working with gmail for MVC 3Elmah 不使用 gmail 进行 MVC 3
【发布时间】:2011-10-06 02:39:02
【问题描述】:

我将 ELMAH 用于带有 Gmail 的 MVC 3 应用程序。我已经使用了几个关于如何做到这一点的参考资料,包括 This StackOverflow Question,它经过了多次修复

我仍然无法确定为什么我没有收到来自 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="username@gmail.com" password="myPassword"/>
      </smtp>
    </mailSettings>
    </system.net>
    <elmah>
    <errorMail   from="fromAddress@gmail.com" to="toAddress@gmail.com" 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>

关于为什么这可能不起作用的任何想法?

【问题讨论】:

  • 愚蠢的问题,但必须问 - 你检查过 Gmail 的垃圾邮件过滤器吗?我经常忘记看那里,但有时它可能很激进。
  • 没有愚蠢的问题!话虽如此,我检查了,但没有运气=(我的想法不多了!感谢您的评论!

标签: c# asp.net-mvc web-config elmah


【解决方案1】:

编辑: 看看其他 ELMAH 配置,这可能不一定正确,但您可能还是想尝试一下。另外,我知道 system.net 邮件设置上的 enableSSL 属性是 .NET 4.0 中的新属性 - 您可能还想在该部分添加 enableSSL=true,因为 GMail 确实使用 SSL 进行连接。

在将您的设置与其他 ELMAH 配置的设置进行比较时,您似乎将主机配置属性和一些其他设置从 ELMAH 设置中排除在外。我不认为 ELMAH 查看 system.net 邮件设置,而是它自己的 errorMail 标记

这个:

<elmah>
    <errorMail 
      from="fromAddress@gmail.com"
       to="toAddress@gmail.com"
       subject="Error"
       async="true"
       smtpPort="587"
       useSsl="true"/>
    </elmah>

应该改成这样:

<elmah>
    <errorMail 
      from="fromAddress@gmail.com"
       to="toAddress@gmail.com"
       subject="Error"
       async="true"
       smtpPort="587"
       useSsl="true"
       host="smtp.gmail.com"
       userName="username@gmail.com"
       password="myPassword"/>
    </elmah>

【讨论】:

  • 中,将 smtpPort 属性设置为“0”。这样做会导致 ELMAH 使用根据 设置定义的端口。
  • host属性应该是smtpServer吗?
  • 我不确定这到底是哪一部分有帮助,但我挣扎了一整天,试图让 elmah 通过 SES 发送电子邮件并使用您的设置对我有用!谢谢!
  • Elmah 邮件设置对我有用。我有一个使用 Elmah 的 Web 应用程序和一个 Windows 服务。我们也不转发电子邮件。我将邮件设置都添加到了 elmah 配置节点,它们都开始工作了。
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2011-12-14
  • 2012-11-25
  • 2011-08-17
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多