如何通过电子邮件发送错误消息

时间:2011-02-14 11:01:34

标签: asp.net vb.net

我有下面的代码,我现在需要弄清楚如何不仅显示,而且还将其全部通过电子邮件发送到我的电子邮件,这样,如果任何用户遇到错误,我们就会看到它到底是什么。

Catch ex As Exception
      lblInformation.Text = ("<h4>Unable to save data in database</h4>" + vbNewLine + "The error was '" + ex.Message + "'" + vbNewLine + vbNewLine + "The SQL Command which falied was:" + vbNewLine + "<strong>" + mySQL + "</strong>" + vbNewLine + "Please contact the Service Desk to report this error.").Replace(vbNewLine, "<br />" + vbNewLine)
      booInsertedRecord = False
Finally
      myConnection.Close()
End Try

我试过插入

SmtpMail.Send(objEMail)

在“booInsertedRecord = False”之上的新行中然后创建一个新的“Dim objEMail New MailMessage()”然后意识到这将无法工作,因为它的msg是在catch中定义的,所以不确定旁边的步骤是什么取。

我使用VB已经有一段时间了,我不需要使用这样的东西,所以任何帮助都会非常感激。

编辑 - @tzup ToString()显示

[The error was 'System.Data.SqlClient.SqlException: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
The statement has been terminated.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at ASP.bulletinform_aspx.Upload_Click(Object source, EventArgs e) in E:\Bulletin\Bulletin\Bulletin\BulletinForm.aspx:line 415']
如果我有空格,

会把它放在评论中,第415行是myUpdate.ExecuteNonQuery()

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

很久以前Jeff Atwood创建了一个用户友好异常处理程序。我用它:) http://www.codinghorror.com/blog/2004/06/user-friendly-exception-handling.html

它允许您通过电子邮件发送错误,甚至包括异常时PC的屏幕截图。

答案 2 :(得分:1)

在catch块中创建电子邮件对象,例如将内容设置为lblInformation.Text,然后发送它。

那应该有用。

为电子邮件发送功能创建静态类,静态函数将字符串作为参数。在util程序集中定义此类,在项目中引用此程序集,然后在catch语句中需要时调用它(如果您愿意)。

你的课程可能是:    EmailUtil.SendMail(string msg);

然后你的SendMail函数从配置(smtp服务器,登录等)读入一些参数,然后发送电子邮件。

除此之外,log4net非常擅长处理这种情况,一旦你正确配置它(在我看来不是一个非常陡峭的学习曲线)

祝你好运!

修改

以下是使用 TryParse

进行数据验证的示例
string someTextVal = "3";
string someDateVal = "14.02.2011";

int i;
if (!int.TryParse(someTextVal, out i))
{
   throw new Exception("Error trying to convert value=" + someTextVal + " to an int");
}
// Now i holds a validated integer

DateTime dt;
if (!DateTime.TryParse(someDateVal, out dt))
{
   throw new Exception("Error trying to convert value=" + someDateVal + " to a datetime");
}
// Now dt holds a validated date

注意日期时间验证可能需要一些柚木,具体取决于输入的呈现方式

LATER EDIT 如果有人需要在VB中转换我的C#代码(因为问题是用VB标记的),这里有一个指向在线转换器的链接:Convert C# to VB.NET

答案 3 :(得分:1)

通常有一些记录系统可以做到这一点,所以你不要重新发明轮子,也不要在代码中的catch块中加入任何逻辑。

您可以查看Log4Net以及Microsoft Logging Enterprise Libraries,我个人更喜欢并使用Log4Net,在您的catch块中,您只需使用类似Logger.LogError(异常)的内容,具体取决于您在app中如何配置它。配置您获取数据库和/或事件日志和/或通过电子邮件和/或文本文件记录的所有内容以及更多内容。