Envoyer un e-mail d'Elmah?

87

Quelqu'un utilise-t-il Elmah pour envoyer des exceptions par e-mail? J'ai configuré la journalisation Elmah via SQL Server et je peux afficher la page des erreurs via la page Elmah.axd, mais je ne parviens pas à faire fonctionner le composant de messagerie. L'idée ici est de recevoir la notification par e-mail afin que nous puissions réagir plus rapidement aux exceptions. Voici mon web.config (sections inutiles omises), avec toutes les données sensibles remplacées par * * *. Même si je spécifie un serveur auquel se connecter, le service SMTP doit-il être exécuté sur la machine locale?

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

Réponses:

79

Vous avez besoin du ErrorMail httpModule.

ajoutez cette ligne dans la section <httpModules>

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

Si vous utilisez un serveur SMTP distant (ce qui ressemble à vous), vous n'avez pas besoin de SMTP sur le serveur.

TonyB
la source
1
Existe-t-il un moyen de configurer le travail quotidien pour envoyer des erreurs consolidées?
Chaitanya Gadkari
65

Oui, si vous n'utilisez pas de serveur SMTP distant, le serveur SMTP doit être configuré localement. Vous pouvez également configurer le courrier électronique pour elmah dans web.config comme suit:

<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
la source
4
Cela a très bien fonctionné. Je ne savais pas qu'ELMAH pouvait se connecter à la section mailSettings standard. L'attribut smtpPort = "0" est assez étrange.
Ben Mills
1
smtpPort = "0" ne semble pas nécessaire car il utilise le port spécifié sous system.net; lors de l'exécution avec le serveur de développement, je devais définir useSsl = "false" sinon cela planterait le serveur (probablement parce que je n'ai pas configuré SSL)
Răzvan Flavius ​​Panda
J'ai trouvé que l'ordre des éléments était significatif. Spécification de system.net APRÈS ÉCHEC d'elmah. Le système ELMAH a agi comme si aucun serveur de messagerie n'avait été défini. Mettre system.net l'a d'abord fait fonctionner.
Mark Meuer
Si j'utilise les paramètres ci-dessus, toute personne ayant accès au fichier web.config connaîtra mon mot de passe de messagerie, n'est-ce pas?
Incassable
5

J'ai moi-même utilisé Elmah dans cette configuration et j'ai dû installer le serveur avec SMTP localement. Il s'agit d'une installation simple sur votre serveur IIS local. Cela devrait faire l'affaire.

Bon point ci-dessus, vous avez besoin du module errorMail MAIS si vous n'utilisez pas de serveur SMTP distant, vous avez besoin de SMTP localement, juste pour clarifier.

Rob Bazinet
la source