Отправка электронной почты Elmah и File.AppendText не работают на живом сервере - PullRequest
2 голосов
/ 12 января 2011

Я недавно создал Elmah на сайте, над которым я работаю. Реальная регистрация и страница просмотра elmah работают как на моих локальных, так и на живых серверах. Отправка электронной почты Elmah работает на моем локальном сервере, но не на живом сервере. Я немного осмотрелся и не смог найти решения этой проблемы, но нашел публикацию, в которой человек предложил добавить код в Global.asax, чтобы добавить журнал событий elmah в файл, чтобы попытаться отладить его. Следуя этому совету, я создал файл global.asax (ранее его не было на сайте) и добавил следующий код:

    protected void ErrorMail_Mailing(object sender, ErrorMailEventArgs e)
    {
        string tos = (e.Mail.To.Count != 0) ? string.Join(",", e.Mail.To.ToList().Select(x => x.ToString()).ToArray()) : string.Empty;
        string msg = string.Format("Sending mail to {0}. ", tos);
        string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
        StreamWriter file = File.AppendText(filename);
        file.WriteLine(msg);
        file.Close();
    }
    protected void ErrorMail_Mailed(object sender, ErrorMailEventArgs e)
    {
        string tos = (e.Mail.To.Count != 0) ? string.Join(",", e.Mail.To.ToList().Select(x => x.ToString()).ToArray()) : string.Empty;
        string msg = string.Format("Sent mail to {0}. ", tos);
        string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
        StreamWriter file = File.AppendText(filename);
        file.WriteLine(msg);
        file.Close();
    }
    protected void Session_Start(object sender, EventArgs e)
    {
        string msg = "Session started";
        string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
        StreamWriter file = File.AppendText(filename);
        file.WriteLine(msg);
        file.Close();
    }
    protected void Application_Error(object sender, EventArgs e)
    {
        string msg = "An error occured";
        string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
        StreamWriter file = File.AppendText(filename);
        file.WriteLine(msg);
        file.Close();
    }

Затем я перешел на страницу, которая не существует, чтобы сгенерировать ошибку 404, и мой текстовый файл на локальном компьютере привел к следующему:

Session started
An error occured
Sending mail to myemail@someplace.com. 
Sent mail to myemail@someplace.com. 

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

Единственное, о чем я могу думать, это то, что настройки IIS не должны быть правильными. Кто-нибудь может подумать о настройке, которая помешала бы elmah отправлять электронные письма (но не другие части моего приложения) и / или помешала бы записи в файл? К вашему сведению, на сайте есть файлы, которые отлично работают.

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

РЕДАКТИРОВАТЬ: похоже, мой файл Global.asax просто ничего не делает. Как будто событие не вызвали по какой-то причине. Даже события asp.net.

1 Ответ

0 голосов
/ 26 мая 2011

Используете ли вы другой файл web.config для вашей локальной и производственной среды? Я обычно нахожу, что, если мой локальный работает, но мое живое не работает, то моя конфигурация виновата. Если действующий сайт успешно отправляет электронные письма, не относящиеся к ELMAH, то я хотел бы предположить, что это конфигурация ELMAH в живом web.config.

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

Кроме того, если вы используете IIS7 на своем работающем сервере, вам необходимо добавить ключ ELMAH в раздел system.webServer / modules файла web.config.

...