如何从 ELMAH 发送电子邮件?

Posted

技术标签:

【中文标题】如何从 ELMAH 发送电子邮件?【英文标题】:how to send email from ELMAH? 【发布时间】:2016-12-12 23:25:21 【问题描述】:

我正在尝试将 ELMAH 配置为发送电子邮件,但出现以下错误:

“/”应用程序中的服务器错误。

SMTP 服务器需要安全连接,或者客户端没有 认证。服务器响应为:5.7.0 必须发出 STARTTLS 先命令。 59sm11486886otw.9 - gsmtp

我已经看到了几个关于同样错误的帖子,但没有一个建议奏效。

ELMAH 正在将错误记录到 SQL Server。

此外,我可以使用 ELMAH 使用的相同凭据发送 SMTP 邮件,因此我认为我没有身份验证错误:

MailMessage mailx = new MailMessage();
mailx.To.Add("mySendTo");
mailx.From = new MailAddress("mySendFrom");
mailx.Subject = "My Subject";
mailx.Body = string.Format("My email body");
mailx.IsBodyhtml = true;

SmtpClient smtpx = new SmtpClient();
smtpx.Host = "smtp.gmail.com";
smtpx.Port = 587;
smtpx.UseDefaultCredentials = false;
smtpx.Credentials = new System.Net.NetworkCredential("MyLoginUser", "MyLoginPwd");
smtpx.EnableSsl = true;
smtpx.Send(mailx);

Web.Config 包含以下 ELMAH 信息:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <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="true" />
    <add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
    <add key="elmah.mvc.allowedRoles" value="*" />
    <add key="elmah.mvc.allowedUsers" value="developer1@aaa.com, developer2@aaa.com" />
    <add key="elmah.mvc.route" value="elmah" />
    <add key="elmah.mvc.UserAuthCaseSensitive" value="true" />
  </appSettings>

  <httpModules>
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
  </httpModules>

  <modules>
    <remove name="FormsAuthentication" />
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network host="smtp.gmail.com" port="587" userName="MyUserName" password="MyUserPwd" defaultCredentials="false"/>
      </smtp>
    </mailSettings>
  </system.net>

  <elmah>
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="DefaultConnection" />
    <security allowRemoteAccess="yes" />   

    <errorMail
        from="mySendFrom@gmail.com" to="mySendTo" subject="MySubject" async="false" smtpPort="587" useSSL="true"/>
  </elmah>

</configuration>

使用的 ELMAH 版本是 1.2.13605.0

我已经在不使用 SSL 的开发环境和具有 SSL 证书的测试环境中进行了尝试。两者都有相同的错误。

我已经尝试了 SO 帖子中的许多建议,但都没有奏效。以下是其中一些:Unable to configure mail for ElmahSend email from Elmah?Elmah not sending Emailelmah - cannot email exceptions

【问题讨论】:

【参考方案1】:

我不确定它是否能解决您的问题,但我尝试使用 ELMAH Configuration Validator 验证您的 web.config。结果如下:

“allowRemoteAccess”属性无效 - 根据其数据类型“http://www.w3.org/2001/XMLSchema:boolean”,值“yes”无效 - 字符串“yes”不是有效的布尔值价值。 “useSSL”属性未声明。

您可以考虑将 allowRemoteAccess 更改为“true”,但“yes”可能也可以。我在结果中看到的是“useSSL”属性。尝试将其重命名为“useSsl”,看看是否有效。验证器接受 'useSsl' 但不接受 'useSSL'。

【讨论】:

我将 useSSL 重命名为 useSsl 并且成功了!感谢您的帮助。

以上是关于如何从 ELMAH 发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

限制 Elmah 发送的电子邮件数量

Elmah:我如何记录表单发布数据?

Elmah.MVC 与 Elmah.contrib.Mvc

如何从电子邮件正文发送电子邮件?

如何使用php从xampp发送具有匿名名称的电子邮件

如何从 SQL Server 发送电子邮件?