2015-04-02 3 views
4

Я спросил об этом в группе elmah в группах google, но все еще озадачен, поэтому решил, что выброшу его в более крупный пул. Вот оригинальная записка с моим кодом, как она сейчас стоит.Как подключить собственный поставщик электронной почты в 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

вам нужно добавить новый ERRORLOG в Do в файле web.config, указывающем на ваш регистратор электронной почты? –

+0

Не уверен, но кажется маловероятным. Как это будет выглядеть? –

+1

Закрыть, Майк. Мне нужно было добавить параметр errorMail в разделе . Настройки не имеют смысла; он просто должен быть там. –

ответ

3

Добавлены настройки errorMail в разделе моего web.config и приложение было в состоянии добраться до моего пользовательского модуля:

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

 Смежные вопросы

  • Нет связанных вопросов^_^