Application_Error - problem sending email from global.asax

I have a global.asax file and I'm trying to use the Application_Error method and display properties from GetLastError() and then email those errors to myself.  When I test my application for errors, the email never gets sent to me.  And, it doesn't appear the global.asax events are firing.  I tried setting breakpoint in the global.asax file, but the breakpoint is never hit.

I know my smtp settings in my web.config file work because I can test my contact form and the email sends to me fine.  So, I'm not sure what I'm missing in the global.asax file and why the error emails are not getting sent to me.

See below for the code in my global.asax file.

Thanks for any help.
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Net.Mail" %>
<%@ Import Namespace="System.Configuration" %>
 
<script runat="server">
 
    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
 
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown
 
    }
        
    void Application_Error(object sender, EventArgs e) 
    {
        HttpContext ctx = HttpContext.Current;
 
        Exception exception = ctx.Server.GetLastError();
 
        string message = "<table width=\"85%\" border=\"0\" align=\"center\" cellpadding=\"5\" cellspacing=\"1\" style='background-color: #000099;'>";
        message += "<tr bgcolor=\"#eeeeee\">";
        message += "<td colspan=\"2\" style='font-family: Verdana;font-size: 12px;color: #000099;font-weight: bold;'>Page Error</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Error</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + exception.Message.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Details</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + exception.InnerException.Message.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>URL</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + Request.Url.AbsoluteUri.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Stack Trace</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + exception.InnerException.StackTrace.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Request Host</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + Request.UserHostAddress.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Host Name</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + Request.UserHostName.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>User Agent</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + Request.UserAgent.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>URL Referrer</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + Request.UrlReferrer.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>UserName</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + Request.LogonUserIdentity.Name.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Method</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + exception.TargetSite.ToString() + "</td>";
        message += "</tr>";
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Source</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + exception.Source.ToString() + "</td>";
        message += "</tr>";
        message += "</table>";
        
        // Compose Email
        MailMessage msg = new MailMessage();
 
        msg.From = new MailAddress(ConfigurationManager.AppSettings["ApplicationErrorFrom"].ToString());
        msg.To.Add(ConfigurationManager.AppSettings["ApplicationErrorTo"].ToString());    
        msg.Subject = "Error occurred in personal website application";
        msg.IsBodyHtml = true;
        msg.Body = message;
 
        SmtpClient smtp = new SmtpClient();
        smtp.Send(msg);
 
        ctx.Server.ClearError();
 
    }
 
    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started
 
    }
 
    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.
 
    }
       
</script>

Open in new window

-Dman100-Software ConsultantAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

eirikurhCommented:
Add error handling to your send method and print out the error message.

        try
        {
            SmtpClient smtp = new SmtpClient();
            smtp.Send(msg);
        }
        catch (Exception ex)
        {
            #if (DEBUG)            
                Response.Write(ex.Message);
                Response.End();
            #endif
        }

Let me know what error message you get.
If the smtp host is missing "The SMTP host was not specified get"

Add the smtp host you want to use to send to your web.config
<system.net>
<mailSettings>
<smtp>
<network host="xxx.xxx.xx.xxx" port="25" />
</smtp>
</mailSettings>
</system.net>


0
-Dman100-Software ConsultantAuthor Commented:
Hi eirikurh,

I added a try/catch block around my send method, but no error message thrown.  I'm not even able to debug the global.asax file.  It doesn't appear that the global.asax events are firing.

The smtp host is definately specified in my web.config file:

<system.net>
    <mailSettings>
      <smtp>
        <network host="xxx.xxx.xx.xxx" port="25"/>
      </smtp>
    </mailSettings>
  </system.net>

I've tried deleting and re-adding the global.asax file, but still the events do not appear to be getting fired.

I have no idea what is going on?

Thanks for your help.
0
eirikurhCommented:
When you set your breakpoint to Applocation_Error method

Can you send me the code where the error occurs

If you catch your error  using try,catch, then Application_Error never gets executed.
0
Build an E-Commerce Site with Angular 5

Learn how to build an E-Commerce site with Angular 5, a JavaScript framework used by developers to build web, desktop, and mobile applications.

-Dman100-Software ConsultantAuthor Commented:
I was finally able to debug into the global.asax file.  I'm getting a null reference on inner exception (see attached)?


screenshot.png
0
eirikurhCommented:
Inner Exception is probable null, you need to add check for the Message and StackTrace

        if (exception.InnerException != null)
        {
            message += "<tr>";
            message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Details</td>";
            message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + exception.InnerException.Message.ToString() + "</td>";
            message += "</tr>";
        }

        if (exception.InnerException != null)
        {
        message += "<tr>";
        message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>Stack Trace</td>";
        message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + exception.InnerException.StackTrace.ToString() + "</td>";
        message += "</tr>";
        }

I would also add check if the Request.UrlReferrer is null

        if (Request.UrlReferrer != null)
        {
            message += "<tr>";
            message += "<td width=\"100\" align=\"right\" bgcolor=\"#eeeeee\" style='font-family: Verdana;font-size: 11px;color: #000099;font-weight: bold;' nowrap>URL Referrer</td>";
            message += "<td bgcolor=\"#FFFFFF\" style='font-family: Verdana;font-size: 11px;'>" + Request.UrlReferrer.ToString() + "</td>";
            message += "</tr>";
        }

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
-Dman100-Software ConsultantAuthor Commented:
Thank you for the help!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.