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

通过Microsoft Exchange Web Services发送邮件如何确认发送成功?

EWS 邮件发送成功的确认方案

你当前使用的Send()方法如果没有抛出异常,仅代表 Exchange 服务端已经接收了发件请求,无法直接证明邮件最终投递成功,可以通过以下几种方式分层验证:


方法1:替换发件方法做基础验证

将原来的email.Send()替换为email.SendAndSaveCopy(),方法执行无异常的话,邮件会自动存入当前账号的「已发送邮件」文件夹,这是最易实现的发件成功标识,修改后的代码参考:

var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1)
{
    Credentials = new WebCredentials(EmailFrom, Password),
    Url = new Uri(ExchangeUrl),
};

var email = new EmailMessage(service)
{
    Subject = "Test",
    Body = "Hello from .net!",
};

email.ToRecipients.Add(EmailTo);

// 替换原Send方法,发送成功会自动同步到已发送文件夹
email.SendAndSaveCopy();

如果执行过程中没有抛出异常,说明 Exchange 服务端已经受理了发件请求,邮件已进入发件队列。


方法2:捕获异常明确错误类型

所有 EWS 发件操作的请求阶段错误都会抛出对应异常,可以通过异常捕获明确失败原因:

try
{
    email.SendAndSaveCopy();
    // 无异常则代表服务端已接收发件请求
    Console.WriteLine("邮件发件请求已被Exchange服务端受理");
}
catch (ServiceResponseException ex)
{
    // 服务端返回的业务错误,比如权限不足、收件人地址无效、邮箱空间不足等
    Console.WriteLine($"发件失败:{ex.Message},错误代码:{ex.ErrorCode}");
}
catch (Exception ex)
{
    // 其他错误,比如网络不通、服务地址配置错误、身份验证失败等
    Console.WriteLine($"系统错误:{ex.Message}");
}

方法3:验证最终投递状态

如果需要确认邮件是否成功投递到收件人邮箱,可以选择以下两种方案:

  • 发送邮件时请求送达回执,后续通过 EWS 查询收件人返回的回执邮件即可确认投递结果
  • 调用 EWS 的邮件跟踪 API,传入发送邮件的唯一 ID 查询实时投递状态,该功能仅 Exchange 2010 及以上版本支持

注意:以上所有方法只能确认 Exchange 服务端的处理状态,如果是收件方服务商拒收、邮件进入垃圾箱等下游投递问题,需要通过退信邮件或收件侧回执进一步判断


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:18:04