You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#批量发送邮件:单个收件人失败是否触发Send(Msg)全局异常?

C#多收件人邮件发送失败的行为说明

好问题!我来给你明确C#中使用SmtpClient.Send(MailMessage)处理多收件人时的错误逻辑:

  • 默认抛出全局异常:只要有任意一个收件人发送失败(比如邮箱地址无效、服务器拒绝投递等),Send()方法就会立刻抛出SmtpFailedRecipientsException(如果只有单个收件人失败,会抛出子类SmtpFailedRecipientException),不会自动跳过失败的收件人继续发送剩余的。
  • 部分收件人可能已收到邮件:这里有个容易踩坑的细节——邮件服务器可能已经成功将邮件投递到部分收件人的邮箱,之后才检测到某个收件人无效并返回错误。也就是说,抛出异常时,成功的收件人已经拿到邮件了,只有失败的那个没收到。
  • 如何定位失败的收件人:抛出的异常对象里包含了详细的失败信息,你可以通过SmtpFailedRecipientsException.InnerExceptions集合遍历每个失败的收件人记录,获取对应的邮箱地址和错误原因。

举个简单的异常处理示例:

try
{
    smtpClient.Send(mailMessage);
}
catch (SmtpFailedRecipientsException ex)
{
    foreach (var innerEx in ex.InnerExceptions)
    {
        var failedRecipient = ((SmtpFailedRecipientException)innerEx).FailedRecipient;
        Console.WriteLine($"收件人 {failedRecipient} 发送失败:{innerEx.Message}");
    }
}
catch (SmtpException ex)
{
    Console.WriteLine("邮件发送出现全局错误:" + ex.Message);
}

如果你的需求是跳过失败的收件人,确保其他收件人能收到邮件,那不能直接用多收件人一次性发送的方式,建议拆分收件人列表,逐个(或小批量)发送,对每个发送操作单独捕获异常,这样就不会因为单个收件人失败导致全部发送流程中断。

内容的提问来源于stack exchange,提问作者amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:47:51