【发布时间】:2011-06-07 12:29:17
【问题描述】:
我最近在我正在开发的网站上设置了 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 事件。
【问题讨论】:
-
您确定实时服务器上的 SMTP 设置正确,并且您指定的 SMTP 服务器允许将邮件发送给您已配置 ELMAH 以将电子邮件发送给的任何人吗?如果您创建一个测试页面,并在其中编写代码以使用相同的 SMTP 设置将电子邮件发送到该电子邮件地址,这是否有效?
-
网站中已有页面使用我们的 gmail SMTP 发送电子邮件。我也知道它有效,因为在本地运行代码时会发送电子邮件。它只是在服务器上发送失败。
-
您的 Global.asax.cs 文件是否继承自 HttpApplication?
-
@Jeff 我们没有使用 asax 文件。所以它会做任何 .net 的默认设置。