2015-04-02 50 views
4

我在谷歌組的elmah小組上問過這個問題,但我仍然很困惑,所以我想我會把它扔到一個更大的池中。這是我現在代碼中的原始筆記。如何在ELMAH中連接自定義電子郵件提供程序?


我有ELMAH建立在我的MVC 5應用程序,我想使用自定義的電子郵件服務發送電子郵件,而不是使用SMTP發送是默認設置的。 (這是一個組織偏好。)我一直在嘲笑它,但無法弄清楚如何做到這一點。我的服務調用工作正常,但我無法將其掛起,以便在發生異常時運行。任何援助將不勝感激。

我已經有了設立如下:

Web.config中(除去非ELMAH相關線):

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=301880 
    --> 
<configuration> 
    <configSections> 
    <sectionGroup name="elmah"> 
     <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, 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> 
    ... 
    <add key="elmah.mvc.disableHandler" value="false" /> 
    <add key="elmah.mvc.disableHandleErrorFilter" value="false" /> 
    <add key="elmah.mvc.requiresAuthentication" value="false" /> 
    <add key="elmah.mvc.IgnoreDefaultRoute" value="false" /> 
    <add key="elmah.mvc.allowedRoles" value="*" /> 
    <add key="elmah.mvc.allowedUsers" value="*" /> 
    <add key="elmah.mvc.route" value="elmah" /> 
</appSettings> 
    <connectionStrings> 
    <add name="BFRDPDB" providerName="System.Data.SqlClient" connectionString="blahblah;" /> 
    </connectionStrings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5.1" /> 
    <customErrors mode="Off" defaultRedirect="~/Home/Error"> 
     <error statusCode="404" redirect="~/Home/Error" /> 
    </customErrors> 
    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorMail" type="BFRDP.Infrastructure.ErrorMailModule" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorMail" type="BFRDP.Infrastructure.ErrorMailModule" preCondition="managedHandler" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" /> 
    </modules> 
    </system.webServer> 
    <elmah> 
    <security allowRemoteAccess="false" /> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" 
       connectionStringName="BFRDPDB" 
       applicationName="FarmAnswers.org" /> 
    </elmah> 
    <location path="elmah"> 
    <system.web> 
     <httpHandlers> 
     <add verb="POST,GET,HEAD" 
      path="elmah.axd" 
      type="Elmah.ErrorLogPageFactory, Elmah" /> 
     </httpHandlers> 
     <authorization> 
     <allow roles="SuperAdmin" /> 
     <deny users="*" /> 
     </authorization> 
    </system.web> 
    <system.webServer> 
     <handlers> 
     <add name="ELMAH" 
      verb="POST,GET,HEAD" 
      path="elmah" 
      type="Elmah.ErrorLogPageFactory, Elmah" 
      preCondition="integratedMode" /> 
     </handlers> 
    </system.webServer> 
    </location> 
</configuration> 

而且我ErrorMailModule.cs文件看起來像這樣:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Net.Mail; 

namespace BFRDP.Infrastructure 
{/// <summary> 
    /// Summary description for ErrorMailModule 
    /// </summary> 
    public class ErrorMailModule : Elmah.ErrorMailModule 
    { 
     public ErrorMailModule() 
     { 
     } 



     protected override void SendMail(MailMessage mail) 
     { 
      if (mail == null) 
       throw new ArgumentNullException("mail"); 
      // Code to send email here through internal provider 
     } 

    } 
} 

我的錯誤確實記錄在數據庫中,但永遠不會發送發送電子郵件的代碼。

我在做什麼錯?

+1

你需要在添加一個新的錯誤日誌在web.config中指向您的電子郵件記錄器的部分? – 2015-04-02 16:08:46

+0

不確定,但似乎不太可能。這樣的事情會是什麼樣子?麥克。密爾, – 2015-04-03 16:58:31

+1

我需要在部分添加一個errorMail設置。這些設置是沒有意義的。它只是在那裏。 – 2015-04-16 15:57:12

回答

3

加在我的web.config的部分和應用程序的errorMail設置能得到我的自定義模塊:

<elmah> 
 
    <security allowRemoteAccess="false" /> 
 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="BFRDPDB" applicationName="FarmAnswers.org" /> 
 
    <errorMail 
 
    from="[email protected]" 
 
    to="[email protected]" 
 
    subject="..." 
 
    priority="Low" 
 
    async="true" 
 
    smtpPort="25" 
 
    smtpServer="smtp.example.com" 
 
    useSsl="true" 
 
    userName="johndoe" 
 
    password="secret" 
 
    noYsod="true" /> 
 
    </elmah>

相關問題