【问题标题】:Send email from Elmah?从 Elmah 发送电子邮件?
【发布时间】:2010-09-07 06:10:53
【问题描述】:

是否有人使用 Elmah 通过电子邮件发送异常?我已经通过 SQL Server 设置了 Elmah 日志记录,并且可以通过 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>

【问题讨论】:

    标签: .net asp.net elmah


    【解决方案1】:

    您需要 ErrorMail httpModule。

    部分中添加这一行

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

    如果您使用的是远程 SMTP 服务器(看起来就是这样),则服务器上不需要 SMTP。

    【讨论】:

    • 有没有办法配置日常工作以发送合并错误?
    【解决方案2】:

    是的,如果您不使用远程 SMTP 服务器,您必须在本地配置 SMTP 服务器。您还可以在 web.config 中为 elmah 配置电子邮件,如下所示:

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

    【讨论】:

    • 这很好用。我没有意识到 ELMAH 可以连接到标准的 mailSettings 部分。 smtpPort="0" 属性有点奇怪。
    • smtpPort="0" 似乎不需要,因为它使用 system.net 下指定的端口;在使用开发服务器运行时,我必须设置 useSsl="false" 否则它会导致服务器崩溃(可能是因为我没有设置 SSL)
    • 我发现元素的顺序很重要。在 elmah 失败后指定 system.net。 ELMAH 系统就像没有定义邮件服务器一样。将 system.net 放在首位使其工作。
    • 如果我使用上述设置,任何访问 web.config 文件的人都会知道我的电子邮件密码吗?
    【解决方案3】:

    我自己在此配置中使用了 Elmah,我必须在本地使用 SMTP 设置服务器。它可以直接安装在您的本地 IIS 服务器上。这应该可以解决问题。

    上面说得好,您需要 errorMail 模块,但如果您不使用远程 SMTP 服务器,则需要本地 SMTP,这只是为了澄清。

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 2013-04-04
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      相关资源
      最近更新 更多