加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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());
  }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读