2008-08-29 28 views
83

¿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 obtener 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 confidenciales reemplazados por * * *. Aunque estoy especificando un servidor para conectarme, ¿el servicio SMTP debe ejecutarse en la máquina local?¿Enviar correo electrónico de Elmah?

<?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> 

Respuesta

78

Necesita el httpModule ErrorMail.

añadir esta línea dentro de la sección <httpModules>

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

Si está usando un servidor SMTP remoto (que parece que eres) que no es necesario SMTP en el servidor.

+0

¿Hay alguna forma de configurar el trabajo diario para enviar errores consolidados? –

5

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

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

62

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> 
+4

Esto funcionó muy bien. No me di cuenta de que ELMAH puede engancharse a la sección de configuración de correo estándar. El atributo smtpPort = "0" es un poco extraño. –

+1

smtpPort = "0" no parece ser necesario, ya que utiliza el puerto especificado en system.net; mientras corría con el servidor de desarrollo, tuve que configurar useSsl = "false" o se colgaría el servidor (probablemente porque no configuré el SSL) –

+0

Encontré que el orden de los elementos era significativo. Especificando system.net DESPUÉS elmah FAILED. El sistema ELMAH actuó como si no se hubiera definido ningún servidor de correo. Poner System.net primero lo hizo funcionar. –

Cuestiones relacionadas