/// <summary>
        /// Report an error that involves an exception
        /// </summary>
        /// <param name="errorObject">
        /// An object that describes the error (for example, an exception) or null
        /// </param>
        /// <param name="severity">The severity of the error</param>
        /// <param name="title">
        /// The title of the error (for example, Unhandled Exception)
        /// </param>
        /// <param name="message">
        /// An optional message that could provide extra details about the error
        /// </param>
        /// <param name="extraErrorDetails">
        /// A collection of extra details about the error where the key in the <see cref="KeyValuePair{TKey,TValue}"/>
        /// is the detail's name (ie Current Page) and the value is the object that is the detail (ie a string
        /// with the page URL).
        /// </param>
        public void ReportError(object errorObject, ErrorSeverity severity, string title, string message, IEnumerable <KeyValuePair <string, object> > extraErrorDetails)
        {
            ErrorReportingConfigurationSection settings = ErrorReportingConfigurationSection.GetSection();

            if (settings.IsEnabled == false)
            {
                return;
            }

            if (errorObject != null)
            {
                //Check to see whether any of the Ignore rules match the exception
                foreach (Predicate <object> rule in _IgnoreRules)
                {
                    if (rule(errorObject))
                    {
                        return;                         //Matched, ignore this exception
                    }
                }
            }

            MailAddress from = new MailAddress(settings.SendFromEmail.Address, settings.SendFromEmail.DisplayName);
            MailAddress to   = new MailAddress(settings.SendToEmail.Address, settings.SendToEmail.DisplayName);

            MailMessage msg = new MailMessage(from, to);

            msg.IsBodyHtml = _Composer.IsHtmlEmail;
            msg.Body       = _Composer.ComposeEmailBody(errorObject, severity, title, message, extraErrorDetails);
            msg.Subject    = _Composer.ComposeEmailSubject(errorObject, severity, title, message);

            SmtpClient smtp = new SmtpClient();

            smtp.Send(msg);
        }
 /// <summary>
 /// Constructor, creates a <see cref="ErrorReporter"/> object that renders its
 /// emails using a specific <see cref="IErrorEmailComposer"/>
 /// </summary>
 /// <param name="composer">The Composer with which to render emails</param>
 public ErrorReporter(IErrorEmailComposer composer)
 {
     _Composer    = composer;
     _IgnoreRules = new List <Predicate <object> >();
     ErrorReportingConfigurationSection.GetSection();             //Causes a check for the presence of configuration
 }