E-Mail von Elmah senden?


87

Verwendet jemand Elmah, um Ausnahmen per E-Mail zu senden? Ich habe die Elmah-Protokollierung über SQL Server eingerichtet und kann die Fehlerseite über die Seite Elmah.axd anzeigen, aber ich kann die E-Mail-Komponente nicht zum Laufen bringen. Die Idee hier ist, die E-Mail-Benachrichtigung zu erhalten, damit wir schneller auf Ausnahmen reagieren können. Hier ist meine web.config (unnötige Abschnitte weggelassen), wobei alle vertraulichen Daten durch * * * ersetzt werden. Muss der SMTP-Dienst auf dem lokalen Computer ausgeführt werden, obwohl ich einen Server für die Verbindung angegeben habe?

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="elmah">
            <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
            <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
            <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
        </sectionGroup>
    </configSections>
    <appSettings/>
    <connectionStrings>
        <add name="elmah-sql" connectionString="Data Source=***;Initial Catalog=***;Persist Security Info=True;User ID=***;Password=***" />
    </connectionStrings>

    <elmah>
        <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sql"   >
        </errorLog>
        <errorMail from="test@test.com"
           to="test@test.com"
           subject="Application Exception"
           async="false"
           smtpPort="25"
           smtpServer="***"
           userName="***"
           password="***">
        </errorMail>
    </elmah>

    <system.web>        
        <customErrors mode="RemoteOnly" defaultRedirect="CustomError.aspx">
            <error statusCode="403" redirect="NotAuthorized.aspx" />
            <!--<error statusCode="404" redirect="FileNotFound.htm" />-->
        </customErrors>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
            <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
        </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
        </httpModules>
    </system.web>

</configuration>

Antworten:


79

Sie benötigen das ErrorMail httpModule.

Fügen Sie diese Zeile im Abschnitt <httpModules> hinzu

<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />

Wenn Sie einen Remote-SMTP-Server verwenden (wie es aussieht), benötigen Sie kein SMTP auf dem Server.


1
Gibt es eine Möglichkeit, den täglichen Job so zu konfigurieren, dass konsolidierte Fehler gesendet werden?
Chaitanya Gadkari

65

Ja, wenn Sie keinen Remote-SMTP-Server verwenden, muss der SMTP-Server lokal konfiguriert sein. Sie können E-Mails für elmah auch in web.config wie folgt konfigurieren:

<configSections>
   <sectionGroup name="elmah">
     <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler,  Elmah"> 
    </sectionGroup>
</configSections> 

<elmah> 
     <errorMail from="from Mail Address" to="to mail address" 
                async="true"  smtpPort="0" useSsl="true" /> 
</elmah>

<system.net> 
    <mailSettings> 
      <smtp deliveryMethod ="Network"> 
        <network host="smtp.gmail.com" port="587" userName="yourgmailEmailAddress"   password="yourGmailEmailPassword" /> 
      </smtp> 
    </mailSettings> 
</system.net>

4
Das hat super geklappt. Ich wusste nicht, dass ELMAH sich in den Standardbereich mailSettings einbinden kann. Das Attribut smtpPort = "0" ist irgendwie seltsam.
Ben Mills

1
smtpPort = "0" scheint nicht erforderlich zu sein, da es den unter system.net angegebenen Port verwendet. Während ich mit dem Entwicklungsserver lief, musste ich useSsl = "false" setzen, sonst würde der Server abstürzen (wahrscheinlich weil ich kein SSL eingerichtet habe)
Răzvan Flavius ​​Panda

Ich fand die Reihenfolge der Elemente signifikant. Angabe von system.net NACH elmah FEHLGESCHLAGEN. Das ELMAH-System hat sich so verhalten, als wäre kein Mailserver definiert worden. Wenn Sie system.net an die erste Stelle setzen, funktioniert es.
Mark Meuer

Wenn ich die oben genannten Einstellungen verwende, kennt jeder, der auf die Datei web.config zugreift, mein E-Mail-Passwort, oder?
Unbreakable

5

Ich habe Elmah selbst in dieser Konfiguration verwendet und musste den Server lokal mit SMTP einrichten. Es ist eine einfache Installation auf Ihrem lokalen IIS-Server. Dies sollte den Trick tun.

Gut oben, Sie benötigen das errorMail-Modul, ABER wenn Sie keinen Remote-SMTP-Server verwenden, benötigen Sie SMTP lokal, nur um dies zu verdeutlichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.