Enviar e-mail da Elmah?

87

Alguém está usando o Elmah para enviar exceções por e-mail? Eu tenho o log do Elmah configurado via SQL Server e posso visualizar a página de erros por meio da página Elmah.axd, mas não consigo fazer o componente de e-mail funcionar. A ideia aqui é obter a notificação por email para que possamos reagir mais rapidamente às exceções. Aqui está meu web.config (seções desnecessárias omitidas), com todos os dados confidenciais substituídos por * * *. Mesmo que eu esteja especificando um servidor para se conectar, o serviço SMTP precisa estar em execução na 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
fonte

Respostas:

79

Você precisa do httpModule ErrorMail.

adicione esta linha dentro da seção <httpModules>

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

Se você estiver usando um servidor SMTP remoto (que parece que está), não precisa do SMTP no servidor.

TonyB
fonte
1
Existe uma maneira de configurar o trabalho diário para enviar erros consolidados?
Chaitanya Gadkari
65

Sim, se você não estiver usando um servidor SMTP remoto, deverá ter o servidor SMTP configurado localmente. Você também pode configurar o e-mail para elmah em web.config da seguinte maneira:

<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
fonte
4
Isso funcionou muito bem. Não percebi que ELMAH pode se conectar à seção mailSettings padrão. O atributo smtpPort = "0" é meio estranho.
Ben Mills,
1
smtpPort = "0" não parece ser necessário, pois usa a porta especificada em system.net; durante a execução com o servidor de desenvolvimento, tive que definir useSsl = "false" ou então travaria o servidor (provavelmente porque eu não configurei SSL)
Răzvan Flavius ​​Panda
Achei a ordem dos elementos significativa. Especificando system.net APÓS elmah FALHOU. O sistema ELMAH agiu como se nenhum servidor de correio tivesse sido definido. Colocar o system.net primeiro fez com que funcionasse.
Mark Meuer
Se eu usar as configurações acima, qualquer pessoa com acesso ao arquivo web.config saberá minha senha de e-mail, certo?
Inquebrável
5

Eu mesmo usei Elmah nesta configuração e tive que configurar o servidor com SMTP localmente. É uma instalação direta no servidor IIS local. Isso deve funcionar.

Bom ponto acima, você precisa do módulo errorMail, MAS se você não estiver usando um servidor SMTP remoto, você precisa do SMTP localmente, apenas para esclarecer.

Rob Bazinet
fonte