Лучшие способы уменьшить объем при отправке по электронной почте необработанного исключения

#c# #asp.net-mvc #email #exception-handling

#c# #asp.net-mvc #Адрес электронной почты #исключение

Вопрос:

Я подумываю о добавлении некоторого кода в мой global.asax в мои веб-приложения, чтобы отправлять мне электронное письмо при возникновении необработанного исключения.

В настоящее время я делаю следующее

  • Запись cookie на компьютере пользователя — на случай, если они отправляют спам, нажмите F5 и веб-сайт был перезапущен
  • Добавление записи в system.Web.Cache —

Я что-то упускаю? Вы бы сделали что-то другое?

 protected void Application_Error()
{
    var ex = Server.GetLastError();
    Server.ClearError();

    if (NotInCache(ex))
    {
        // Email support
    }
}



private static bool NotInCache(Exception ex)
{
    bool returnValue = true;

        if (ex != null)
        {
            HttpContext current = HttpContext.Current;
            LogWriter.Trace(MethodBase.GetCurrentMethod(), Dfait.Diagnostics.TraceLevel.Level4, "Checking Cache for our exception");

            if (current != null)
            {
                string key = ex.StackTrace;
                string[] split = System.Text.RegularExpressions.Regex.Split(ex.StackTrace, "rn");
                string value = "Exception Exists";
                DateTime expiryDate = DateTime.Now.AddDays(1);

                if (split.Length > 0)
                {
                    key = split[0];
                }

                key = key.Trim();

                HttpCookie remedyCookie = current.Request.Cookies[key];

                if (remedyCookie == null)
                {
                    HttpCookie newCookie = new HttpCookie(key, value);
                    newCookie.Expires = expiryDate;
                    current.Response.Cookies.Add(newCookie);
                }
                else
                {
                    returnValue = false;
                }

                // The next block is to check the cache of the user.
                object foundCache = HttpRuntime.Cache[key];

                if (foundCache == null)
                {
                    HttpRuntime.Cache.Insert(key, value, null, expiryDate, TimeSpan.Zero);
                }
                else
                {
                    returnValue = false;
                }
            }
        }

    return returnValue;
}
  

Комментарии:

1. Если вы используете MVC3, вы можете установить пакет Elmah из NuGet. code.google.com/p/elmah

2. Если кто-то хочет отправить вам спам, файл cookie не очень надежен.

Ответ №1:

В зависимости от того, как скоро вы хотите получить исключения, вы всегда можете просто записать их в файл, а затем отправлять файл самому себе каждые 10 минут, 1 час, 1 день и т.д.

Таким образом, вам не нужно сильно беспокоиться о том, что люди будут рассылать спам на веб-сайт, поскольку это будет просто куча повторяющихся исключений в файле.

После отправки файла вы можете удалить его или каким-то образом пометить его как отправленный, а затем запустить новый файл. Таким образом, вы получаете файл по электронной почте только тогда, когда нужно отправить что-то новое.

Комментарии:

1. Отличная идея, я попробую это в понедельник.

Ответ №2:

Лично я бы не стал решать проблему так, как вы предлагаете. Вам лучше отправлять по электронной почте каждое отдельное исключение, а затем находить удобный способ фильтрации писем по мере их поступления.

У меня аналогичная настройка процесса с использованием Elmah (вам следует изучить возможность его использования), и я могу сказать, что если бы у меня был фильтр, подобный предлагаемому вами, я бы упустил важную информацию, помогающую диагностировать проблемы.

Я хочу сказать, что в конечном итоге это проглотит некоторые исключения, которых вы не хотели.

Кроме того, я могу сказать вам из первых рук, что вы в любом случае будете получать спам из-за необработанных исключений. Количество необработанных исключений, возникающих из-за многочисленных хакерских уязвимостей и даже поисковых ботов, мгновенно переполнит ваш почтовый ящик.

Комментарии:

1. Хорошая идея, я посмотрю на Elmah. Спасибо за совет о spider amp; ботах. Я не подумал об этом, поскольку большинство моих приложений являются внутренними (ожидайте нескольких).