//处理未捕获的异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
//处理“UI线程”异常
Application.ThreadException += application_ThreadException
//处理“非UI线程”异常
AppDomain.CurrentDomain.UnhandledException += currentDomain_UnhandledException
//处理“未观察到的异常”
TaskScheduler.UnobservedTaskException += taskScheduler_UnobservedTaskException
static class CrashHandler
{
internal static void SendEmail(string body)
{
try
{
Send(body);
}
catch (Exception)
{
}
}
private static void Send(string body)
{
#region MailUser
const string host = "smtp.qq.com";
const string from = "yinyongxian@qq.com";
const string to = "yinyongxian@qq.com";
const string password = "***";
#endregion
var subject = GenerateSubject();
var environmentMessage = GenerateEnvironmentMessage();
body = environmentMessage + "<br/>" + body;
var mailMessage = new MailMessage(from, to, subject, body)
{
BodyEncoding = Encoding.UTF8,
IsBodyHtml = true
};
var smtpClient = new SmtpClient(host)
{
Credentials = new System.Net.NetworkCredential(from, password),
DeliveryMethod = SmtpDeliveryMethod.Network
};
smtpClient.SendAsync(mailMessage, null);
}
private static string GenerateEnvironmentMessage()
{
var productName = Format("软件名称", CrashMessage.ProductName);
var productVersion = Format("软件版本", CrashMessage.ProductVersion);
var lastWriteTime = Format("编译时间", CrashMessage.LastWriteTime.ToString(CultureInfo.CurrentCulture));
var machineName = Format("机器名称", CrashMessage.MachineName);
var userName = Format("当前登录用户", CrashMessage.UserName);
var osVersionString = Format("系统信息", CrashMessage.OsVersion.ToString());
var platformString = Format("系统平台", CrashMessage.Platform.ToString());
var processorCount = Format("处理器数量", CrashMessage.ProcessorCount.ToString());
var dateTimeNow = Format("发生时间", CrashMessage.DateTimeNow.ToString(CultureInfo.CurrentCulture));
const string remarks = "<p>来自蜂巢网管自动发送的电子邮件<p/>";
var strings = new[]
{
productName,
productVersion,
lastWriteTime,
machineName,
userName,
osVersionString,
platformString,
processorCount,
dateTimeNow,
remarks
};
var environmentMessage = string.Concat(strings);
return environmentMessage;
}
private static string Format(string text, string value)
{
return string.Format("{0}: {1}<br/>", text, value);
}
private static string GenerateSubject()
{
return string.Format("{0}-{1}-{2}", CrashMessage.ProductName, CrashMessage.ProductVersion, CrashMessage.DateTimeNow);
}
}
public class CrashMessage
{
public static string ProductName
{
get { return Application.ProductName; }
}
public static string ProductVersion
{
get { return Application.ProductVersion; }
}
public static DateTime LastWriteTime
{
get
{
var fileInfo = new FileInfo(Application.ExecutablePath);
return fileInfo.LastWriteTime;
}
}
public static string MachineName
{
get { return Environment.MachineName; }
}
public static string UserName
{
get { return Environment.UserName; }
}
public static OperatingSystem OsVersion
{
get { return Environment.OSVersion; }
}
public static PlatformID Platform
{
get { return OsVersion.Platform; }
}
public static int ProcessorCount
{
get { return Environment.ProcessorCount; }
}
public static DateTime DateTimeNow
{
get { return DateTime.Now; }
}
}