Wysłać e-mail od Elmah?

87

Czy ktoś używa Elmah do wysyłania wyjątków pocztą e-mail? Mam skonfigurowane rejestrowanie Elmah za pośrednictwem SQL Server i mogę wyświetlić stronę błędów za pośrednictwem strony Elmah.axd, ale nie mogę uruchomić składnika poczty e-mail. Chodzi o to, aby otrzymać powiadomienie e-mail, abyśmy mogli szybciej reagować na wyjątki. Oto mój web.config (pominięto niepotrzebne sekcje), w którym wszystkie poufne dane zostały zastąpione przez * * *. Nawet jeśli określam serwer, z którym mam się połączyć, czy usługa SMTP musi być uruchomiona na komputerze lokalnym?

<?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
źródło

Odpowiedzi:

79

Potrzebujesz httpModule ErrorMail.

dodaj tę linię w sekcji <httpModules>

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

Jeśli używasz zdalnego serwera SMTP (który wygląda na to, że jesteś), nie potrzebujesz SMTP na serwerze.

TonyB
źródło
1
Czy istnieje sposób skonfigurowania codziennych zadań, aby wysyłać skonsolidowane błędy?
Chaitanya Gadkari
65

Tak, jeśli nie korzystasz ze zdalnego serwera SMTP, musisz skonfigurować serwer SMTP lokalnie. Możesz również skonfigurować pocztę e-mail dla elmah w pliku web.config w następujący sposób:

<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
źródło
4
To działało świetnie. Nie zdawałem sobie sprawy, że ELMAH może podłączyć się do standardowej sekcji mailSettings. Atrybut smtpPort = "0" jest trochę dziwny.
Ben Mills,
1
smtpPort = "0" nie wydaje się być potrzebny, ponieważ używa portu określonego w system.net; podczas pracy z serwerem deweloperskim musiałem ustawić useSsl = "false", bo inaczej spowodowałoby to awarię serwera (prawdopodobnie dlatego, że nie ustawiłem SSL)
Răzvan Flavius ​​Panda
Uważam, że kolejność elementów jest znacząca. Określanie system.net PO AWARII elmah. System ELMAH działał tak, jakby żaden serwer pocztowy nie został zdefiniowany. Pierwsze uruchomienie system.net sprawiło, że zadziałało.
Mark Meuer
Jeśli użyję powyższych ustawień, każdy, kto uzyska dostęp do pliku web.config, będzie znał moje hasło e-mail, prawda?
Niezniszczalny
5

Sam użyłem Elmah w tej konfiguracji i musiałem ustawić serwer z lokalnym SMTP. Jest to prosta instalacja na lokalnym serwerze IIS. To powinno załatwić sprawę.

Słuszna uwaga powyżej, potrzebujesz modułu errorMail, ALE jeśli nie używasz zdalnego serwera SMTP, potrzebujesz SMTP lokalnie, tylko dla wyjaśnienia.

Rob Bazinet
źródło