2011-10-06 86 views
4

我正在爲使用Gmail的MVC 3應用程序使用ELMAH。我已經使用了幾個參考如何做到這一點,包括This StackOverflow Question,它經歷了多個修復程序Elmah不能與MVC 3的gmail配合使用

我仍然無法確定爲什麼我沒有收到來自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> 

爲什麼這可能無法正常工作的任何想法?

+1

愚蠢的問題,但有問 - 你有沒有檢查Gmail的垃圾郵件過濾器?我經常忘記去那裏看看,但偶爾也會有侵略性。 –

+0

沒有這樣的事情作爲一個愚蠢的問題!這是說,我檢查了,但沒有運氣=(我的想法已經用完了!感謝評論! – TheJediCowboy

回答

8

編輯:這可能不一定是真實的看着其他ELMAH配置,但你可能想試試這個。另外,我知道system.net郵件設置中的enableSSL屬性在.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> 
+2

中,將smtpPort屬性設置爲「0」。這樣做會導致ELMAH使用根據設置定義的端口 – AhsenB

+0

如果主機屬性是smtpServer? –

+0

我不確定究竟是哪一部分的幫助,但我努力了一整天,試圖讓elmah通過SES發送電子郵件並使用您的設置爲我工作!謝謝! – Avalanchis