使用Global.asax文件发送电子邮件

时间:2013-11-20 20:56:29

标签: c# asp.net unhandled-exception

如果出现未处理的错误,我想向管理员发送一封电子邮件,其中包含发生错误的信息。以下是我在web.config和Global.asax.cs文件中的内容,重定向有效但电子邮件没有:

<system.web>
    <customErrors mode="On" defaultRedirect="error.aspx" />
</system.web>

void Application_Error(object sender, EventArgs e)
        {
            // Code that runs when an unhandled error occurs
            // Get the exception object.
            Exception error = Server.GetLastError();

            MailMessage mail = new MailMessage();
            mail.To.Add("admin@mysite.com");
            mail.Subject = "Error";
            mail.Body = "Somebody has experienced an error." + "<br><br>";
            mail.Body += error.ToString();

            mail.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient();
            smtp.Host = "smtp.gmail.com";
            smtp.EnableSsl = true;
            smtp.Credentials = new System.Net.NetworkCredential("username", "password");
            smtp.Port = 587;
            smtp.Send(mail);

            Server.ClearError();
        }

3 个答案:

答案 0 :(得分:2)

您应该安装Elmah(您可以通过NuGet执行此操作)而不是自己滚动,并让它为您完成工作。最好的代码是你不写的代码。

Elmah是一个HttpModule,位于ASP.Net堆栈的顶部并捕获/处理未捕获的异常:

  

ELMAH(错误记录模块和处理程序)是一个应用程序范围的错误记录工具   这是完全可插拔的。它可以动态添加到正在运行的ASP.NET Web中   应用程序,甚至是机器上的所有ASP.NET Web应用程序,无需任何操作   重新编译或重新部署。

     

将ELMAH放入正在运行的Web应用程序并进行适当配置后,   您可以在不更改代码的任何一行的情况下获得以下工具:

     
      
  • 记录几乎所有未处理的例外情况。
  •   
  • 远程查看已重新编码的例外日志的网页。
  •   
  • 用于远程查看任何一个已记录异常的完整详细信息的网页,包括   彩色堆栈痕迹。
  •   
  • 在很多情况下,您可以查看ASP.NET的原始黄色死亡屏幕   即使关闭了customErrors模式,也会为给定的异常生成。
  •   
  • 发生时每个错误的电子邮件通知。
  •   
  • 日志中最近15个错误的RSS提要。
  •   

配置Elmah发送电子邮件(在登录之上)非常简单

如果您要编写自己的代码,请安装Log4Net并将其配置为使用1个或更多SMTP appenders以及您想要/需要/期望的任何其他日志追加程序。

答案 1 :(得分:0)

protected void Application_Error(Object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    EmailTheException( ex );
}

private void EmailTheException( Exception ex )
{
    MailMessage mail = new MailMessage();
    mail.To = "GroupEmail@SomeCompany.com";
    mail.From = "SomeApplication@SomeCompany.com";
    mail.Subject = "An Application Exception has Occurred.";
    mail.Body = ex.ToString();

    var smtpHost = ConfigurationManager.AppSettings["smtphost"];
    var port = Convert.ToUInt32(ConfigurationManager.AppSettings["port"]);
    using (SmtpClient client = new SmtpClient(smtpHost))
    {
        if (string.IsNullOrEmpty(smtpHost)) return;
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        try
        {
            client.Send(mail);
        }
        catch (SmtpException smtpEx)
        {
           //write logging code here and capture smtpEx.Message
        }
    }
}

答案 2 :(得分:-2)

默认情况下,所有未捕获的异常都将记录到Windows事件日志中。您可以访问Control Panel - &gt; Administrative Tools - &gt; Event Viewer - &gt; Windows Logs - &gt; Application