¿Enviar correo electrónico de Elmah?

87

¿Alguien está usando Elmah para enviar excepciones por correo electrónico? Tengo el registro de Elmah configurado a través de SQL Server y puedo ver la página de errores a través de la página Elmah.axd, pero no puedo hacer que el componente de correo electrónico funcione. La idea aquí es recibir la notificación por correo electrónico para que podamos reaccionar más rápidamente a las excepciones. Aquí está mi web.config (secciones innecesarias omitidas), con todos los datos sensibles reemplazados por * * *. Aunque estoy especificando un servidor al que conectarme, ¿es necesario que el servicio SMTP se esté ejecutando en la máquina local?

<?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="[email protected]"
           to="[email protected]"
           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>
Mark Struzinski
fuente

Respuestas:

79

Necesita ErrorMail httpModule.

agregue esta línea dentro de la sección <httpModules>

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

Si está utilizando un servidor SMTP remoto (que parece ser) no necesita SMTP en el servidor.

TonyB
fuente
1
¿Existe alguna forma de configurar el trabajo diario para enviar errores consolidados?
Chaitanya Gadkari
65

Sí, si no está utilizando un servidor SMTP remoto, debe tener el servidor SMTP configurado localmente. También puede configurar el correo electrónico para elmah en web.config de la siguiente manera:

<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>
Anand Patel
fuente
4
Esto funcionó muy bien. No me di cuenta de que ELMAH puede conectarse a la sección de configuración de correo estándar. El atributo smtpPort = "0" es un poco extraño.
Ben Mills
1
smtpPort = "0" no parece ser necesario ya que usa el puerto especificado en system.net; mientras funcionaba con el servidor de desarrollo, tuve que configurar useSsl = "false" o de lo contrario colapsaría el servidor (probablemente porque no configuré SSL)
Răzvan Flavius ​​Panda
Encontré que el orden de los elementos era significativo. Especificando system.net DESPUÉS de que elmah FALLÓ. El sistema ELMAH actuó como si no se hubiera definido ningún servidor de correo. Poner system.net primero lo hizo funcionar.
Mark Meuer
Si utilizo la configuración anterior, cualquiera que acceda al archivo web.config sabrá mi contraseña de correo electrónico, ¿verdad?
Irrompible
5

Yo mismo he usado Elmah en esta configuración y tuve que configurar el servidor con SMTP localmente. Es una instalación sencilla en su servidor IIS local. Esto debería funcionar.

Buen punto anterior, necesita el módulo errorMail PERO si no está utilizando un servidor SMTP remoto, necesita SMTP localmente, solo para aclarar.

Rob Bazinet
fuente