Отправить письмо от Эльмы?

87

Кто-нибудь использует Elmah для отправки исключений по электронной почте? У меня настроено ведение журнала Elmah через SQL Server, и я могу просматривать страницу ошибок через страницу Elmah.axd, но я не могу заставить работать компонент электронной почты. Идея состоит в том, чтобы получать уведомление по электронной почте, чтобы мы могли быстрее реагировать на исключения. Вот мой файл web.config (ненужные разделы опущены), все конфиденциальные данные заменены * * *. Несмотря на то, что я указываю сервер для подключения, должна ли служба SMTP работать на локальном компьютере?

<?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="test@test.com"
           to="test@test.com"
           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>
Марк Струзински
источник

Ответы:

79

Вам нужен ErrorMail httpModule.

добавьте эту строку в раздел <httpModules>

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

Если вы используете удаленный SMTP-сервер (который, похоже, и есть), вам не нужен SMTP на сервере.

TonyB
источник
1
Есть ли способ настроить ежедневную работу для отправки консолидированных ошибок?
Чайтанья Гадкари
65

Да, если вы не используете удаленный SMTP-сервер, вам необходимо настроить SMTP-сервер локально. Вы также можете настроить электронную почту для elmah в web.config следующим образом:

<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
Это отлично сработало. Я не понимал, что ELMAH может подключиться к стандартному разделу mailSettings. Атрибут smtpPort = "0" довольно странный.
Бен Миллс,
1
smtpPort = "0", похоже, не нужен, так как он использует порт, указанный в system.net; во время работы с сервером разработки мне пришлось установить useSsl = "false", иначе сервер выйдет из строя (вероятно, из-за того, что я не настроил SSL)
Рэзван Флавиус Панда
Я обнаружил, что порядок элементов имеет значение. Указание system.net ПОСЛЕ СБОЯ elmah. Система ELMAH действовала так, как будто почтовый сервер не был определен. Помещение system.net первым заставило его работать.
Марк Меуэр
Если я использую вышеуказанные настройки, любой, кто имеет доступ к файлу web.config, будет знать мой пароль электронной почты, верно?
Unbreakable
5

Я сам использовал Elmah в этой конфигурации, и мне пришлось настроить сервер с SMTP локально. Это простая установка на локальном сервере IIS. Это должно помочь.

Хороший момент выше, вам нужен модуль errorMail, НО если вы не используете удаленный SMTP-сервер, вам нужен SMTP локально, просто для пояснения.

Роб Базине
источник