Gửi email từ Elmah?


87

Có ai sử dụng Elmah để gửi ngoại lệ qua email không? Tôi đã thiết lập ghi nhật ký Elmah qua SQL Server và có thể xem trang lỗi qua trang Elmah.axd, nhưng tôi không thể làm cho thành phần email hoạt động. Ý tưởng ở đây là nhận thông báo qua email để chúng tôi có thể phản ứng nhanh hơn với các trường hợp ngoại lệ. Đây là web.config của tôi (bỏ qua các phần không cần thiết), với tất cả dữ liệu nhạy cảm được thay thế bằng * * *. Mặc dù tôi đang chỉ định một máy chủ để kết nối, dịch vụ SMTP có cần phải chạy trên máy cục bộ không?

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

Câu trả lời:


79

Bạn cần httpModule ErrorMail.

thêm dòng này bên trong phần <httpModules>

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

Nếu bạn đang sử dụng máy chủ SMTP từ xa (có vẻ như bạn đang sử dụng), bạn không cần SMTP trên máy chủ.


1
Có cách nào để định cấu hình công việc hàng ngày để gửi lỗi tổng hợp không?
Chaitanya Gadkari

65

Có, nếu bạn không sử dụng máy chủ SMTP từ xa, bạn phải cấu hình Máy chủ SMTP cục bộ. Bạn cũng có thể định cấu hình email cho elmah trong web.config như sau:

<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
Điều này làm việc tuyệt vời. Tôi không nhận ra rằng ELMAH có thể kết nối với phần Cài đặt thư tiêu chuẩn. Thuộc tính smtpPort = "0" khá lạ.
Ben Mills

1
smtpPort = "0" dường như không cần thiết vì nó sử dụng cổng được chỉ định trong system.net; trong khi chạy với máy chủ phát triển tôi đã phải thiết lập useSsl = "false" hoặc nếu không nó sẽ sụp đổ các máy chủ (có lẽ vì tôi không thiết lập SSL)
Răzvan Flavius Panda

Tôi thấy thứ tự của các phần tử là đáng kể. Chỉ định system.net SAU KHI THẤT BẠI. Hệ thống ELMAH hoạt động như thể không có máy chủ thư nào được xác định. Lần đầu tiên đưa system.net làm cho nó hoạt động.
Mark Meuer

Nếu tôi sử dụng các cài đặt trên, bất kỳ ai truy cập vào tệp web.config sẽ biết mật khẩu email của tôi phải không?
Không thể phá vỡ

5

Bản thân tôi đã sử dụng Elmah trong cấu hình này và tôi phải thiết lập máy chủ với SMTP cục bộ. Đây là bản cài đặt thẳng trên máy chủ IIS cục bộ của bạn. Cái này cần phải dùng mẹo.

Điểm tốt ở trên, bạn cần mô-đun errorMail NHƯNG nếu bạn không sử dụng máy chủ SMTP từ xa, bạn cần SMTP cục bộ, chỉ cần làm rõ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.