EWS-C#:代发邮件存为草稿问题排查求助
可能的问题及排查方向
1. 发送方法或权限配置错误
- 确认代码中调用的是
EmailMessage.SendAndSaveCopy()方法,而非Save()——后者只会将邮件保存为草稿,不会触发发送流程。 - 代发场景必须正确配置用户模拟:检查
ExchangeService是否设置了ImpersonatedUserId,且执行代发操作的账号拥有ApplicationImpersonation权限。如果调整配置后模拟权限被移除或变更,EWS会以当前操作账号的上下文处理邮件,导致无法写入发件人的已发送文件夹,最终存为草稿。
2. 已发送文件夹指向错误
- 若代码中手动指定了
SentItemsFolderId,需确认该ID对应发件人的WellKnownFolderName.SentItems,而非操作账号的已发送文件夹。如果指向无效或无权限访问的文件夹,EWS会默认将邮件存为草稿。 - 避免手动设置
IsDraft属性为true,这会强制标记邮件为草稿状态,覆盖发送后的默认行为。
3. Exchange服务器端配置变更
- 近期调整的服务器配置可能影响代发逻辑:比如新增的传输规则阻止代发邮件写入已发送文件夹,或者发件人邮箱的已发送文件夹权限被修改,导致操作账号无法写入。
- 检查Exchange服务器的EWS权限策略,确认代发操作未被限制。
4. EWS请求上下文异常
- 确保
EmailMessage是基于发件人模拟上下文的ExchangeService实例创建的。如果服务实例关联的是操作账号而非被模拟的发件人,会导致邮件存储上下文错误,最终存为草稿。
排查步骤建议
- 捕获并查看完整的
ServiceResponseException异常信息(包括ResponseCode和详细错误描述),这比截图更能精准定位问题。 - 用发件人账号登录OWA,手动发送一封邮件确认已发送文件夹功能正常,排除邮箱本身的问题。
- 临时简化代码:创建最基础的代发测试代码(仅设置收件人、主题、内容,调用
SendAndSaveCopy),验证是否能正常保存到已发送文件夹,逐步排查是否是代码中其他属性设置导致的问题。
内容的提问来源于stack exchange,提问作者shoshana
相关产品推荐
相关产品推荐

