EWS实现Exchange本地邮箱延迟发送邮件的异常问题咨询
异常原因拆解
1. SendAndSaveCopy将延迟邮件存入已发送文件夹
EWS的SendAndSaveCopy方法设计逻辑和Outlook客户端的延迟发送完全不同:它会先将邮件标记为已发送状态,再通过Exchange后台的延迟投递机制等待发送时间。所以即使还没到发送时间,邮件副本也会被存入已发送文件夹——这是API本身的行为,并非文档描述不符,只是官方文档可能混淆了客户端操作和EWS API操作的差异。
2. 指定发件箱保存后,发送邮件不移至已发送文件夹
当你手动指定保存位置为发件箱时,相当于直接把邮件写入发件箱,而非通过Exchange的标准提交流程。Exchange默认的“发送后移至已发送”规则,仅对通过Outlook客户端或标准提交接口提交的邮件生效。EWS直接写入的延迟邮件,发送后不会触发这个自动移动逻辑,需要你在代码里手动处理邮件移动,或者配置Exchange传输规则来补充这个行为。
3. Outlook UI不识别延迟配置,点击立即发送
EWS设置的延迟发送依赖Exchange后台的PR_DEFERRED_SEND_TIME等属性,但Outlook客户端识别延迟邮件需要同时满足两个条件:一是邮件在发件箱中,二是邮件包含Outlook客户端侧的特定MAPI属性。EWS创建的延迟邮件仅设置了Exchange后台的属性,缺少Outlook UI识别所需的标记,所以Outlook不会将其显示为斜体的待发送延迟邮件,点击“发送”时会按照普通草稿直接提交,忽略后台的延迟设置。
替代方案验证
你采用的导出Send-MailMessage参数哈希为XML,通过任务计划定时执行的方案是可行的,这种方式相当于在指定时间直接提交邮件,完全绕开了EWS延迟发送的API逻辑问题,更贴合本地邮箱延迟发送的预期行为。
内容的提问来源于stack exchange,提问作者tonypags

