c# – 如何在发送邮件时捕获特定的异常?
发布时间:2020-12-15 23:59:09 所属栏目:百科 来源:网络整理
导读:我有以下代码 try{ if (!bDebug) smtp.Send(m);}catch (Exception e){ wl("Meldingen kunne ikke sendes til en eller flere mottakere.",ConsoleColor.Red); wl(e.Message,ConsoleColor.DarkRed); using (var errorfile = System.IO.File.CreateText("error
我有以下代码
try { if (!bDebug) smtp.Send(m); } catch (Exception e) { wl("Meldingen kunne ikke sendes til en eller flere mottakere.",ConsoleColor.Red); wl(e.Message,ConsoleColor.DarkRed); using (var errorfile = System.IO.File.CreateText("error-" + DateTime.Now.Ticks + ".txt")) { errorfile.WriteLine(e.StackTrace); if (e.GetType() == typeof(SmtpFailedRecipientException)) { var se = (SmtpFailedRecipientException) e; errorfile.WriteLine(se.FailedRecipient); } errorfile.WriteLine(e.ToString()); } } 其中wl是用颜色写入控制台的快捷方式,第一行中的文本显示“消息无法发送给一个或多个收件人. 以前我只捕获了SmtpFailedRecipientException,但是当它开始在其他一些步骤中失败时,我在那里推送了通用的Exception.所以我想知道的部分是我将Exception对象转换为更具体的对象来获取FailedRecipient属性.可以/应该以另一种更恰当的方式完成吗?看起来有点笨重…… 解决方法
您可以拥有多个catch分支:
catch (SmtpFailedRecipientException se) { using (var errorfile = System.IO.File.CreateText("error-" + DateTime.Now.Ticks + ".txt")) { errorfile.WriteLine(se.StackTrace); // variable se is already the right type,so no need to cast it errorfile.WriteLine(se.FailedRecipient); errorfile.WriteLine(se.ToString()); } } catch (Exception e) { wl("Meldingen kunne ikke sendes til en eller flere mottakere.",ConsoleColor.DarkRed); // for other error types just write the info without the FailedRecipient using (var errorfile = System.IO.File.CreateText("error-" + DateTime.Now.Ticks + ".txt")) { errorfile.WriteLine(e.StackTrace); errorfile.WriteLine(e.ToString()); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |