ส่งอีเมลจาก Elmah?


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 บนเซิร์ฟเวอร์


1
มีวิธีกำหนดค่างานประจำวันเพื่อส่งข้อผิดพลาดรวมหรือไม่?
Chaitanya Gadkari

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 สามารถเชื่อมต่อกับส่วนการตั้งค่าเมลมาตรฐานได้ แอตทริบิวต์ smtpPort = "0" นั้นค่อนข้างแปลก
Ben Mills

1
smtpPort = "0" ดูเหมือนจะไม่จำเป็นเนื่องจากใช้พอร์ตที่ระบุภายใต้ system.net ในขณะที่ทำงานกับเซิร์ฟเวอร์การพัฒนาฉันต้องตั้งค่า useSsl = "false" มิฉะนั้นเซิร์ฟเวอร์จะหยุดทำงาน (อาจเป็นเพราะฉันไม่ได้ตั้งค่า SSL)
Răzvan Flavius ​​Panda

ฉันพบว่าลำดับขององค์ประกอบมีความสำคัญ ระบุ system.net หลังจากที่ elmah ล้มเหลว ระบบ ELMAH ทำหน้าที่เหมือนไม่มีการกำหนดเมลเซิร์ฟเวอร์ การวาง system.net ครั้งแรกทำให้มันใช้งานได้
Mark Meuer

หากฉันใช้การตั้งค่าข้างต้นใครก็ตามที่เข้าถึงไฟล์ web.config จะรู้รหัสผ่านอีเมลของฉันใช่ไหม
Unbreakable

5

ฉันใช้ Elmah ด้วยตัวเองในการกำหนดค่านี้และต้องตั้งค่าเซิร์ฟเวอร์ด้วย SMTP ในเครื่อง เป็นการติดตั้งแบบตรงไปตรงมาบนเซิร์ฟเวอร์ IIS ภายในเครื่องของคุณ นี้ควรทำเคล็ดลับ

จุดดีข้างต้นคุณต้องมีโมดูล errorMail แต่ถ้าคุณไม่ได้ใช้เซิร์ฟเวอร์ SMTP ระยะไกลที่คุณต้องการ SMTP ในเครื่องเพียงเพื่อชี้แจง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.