gpt4 book ai didi

c# - 如何在发送邮件时捕获特定异常?

转载 作者:行者123 更新时间:2023-11-30 13:28:22 25 4
gpt4 key购买 nike

我有如下一段代码

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.Red);
wl(e.Message, 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());
}

}

关于c# - 如何在发送邮件时捕获特定异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054756/

25 4 0
文章推荐: c# - Try/Catch 方法错误 ASP.NET
文章推荐: javascript - 在javascript中初始化一个 'multidimensional'对象
文章推荐: javascript - 循环遍历