IIS SMTP中继至Gmail偶发失败(错误码0xC00402CE)求助
解决IIS SMTP Pickup目录偶发处理失败(错误0xC00402CE)的方案
核心问题分析
这个错误的本质是文件写入与SMTP服务扫描的冲突:SSIS脚本生成邮件文件时,若还未完全写完或释放文件句柄,IIS SMTP服务就触发了Pickup目录扫描,导致读取不完整/锁定的文件失败。直接复制文件不会出问题,是因为复制操作完成后文件是完整且无锁定状态的。
具体修复步骤
修改SSIS文件写入逻辑,确保原子性:
不要直接在Pickup目录生成文件,先在临时目录完成文件写入并释放句柄,再将文件移动到Pickup目录(移动操作是原子性的,SMTP只会检测到完整可用的文件)。
C#示例代码:string tempFilePath = @"C:\SMTP_Temp\mail_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".txt"; string pickupFilePath = @"C:\inetpub\mailroot\Pickup\" + Path.GetFileName(tempFilePath); // 写入临时文件,using块自动释放句柄 using (StreamWriter writer = new StreamWriter(tempFilePath, false, Encoding.UTF8)) { writer.Write(邮件内容字符串); } // 移动到Pickup目录 File.Move(tempFilePath, pickupFilePath);调整SMTP服务的Pickup扫描间隔:
打开IIS管理器→选中SMTP服务器→右键属性→「邮件」选项卡,修改「Pickup目录间隔」(默认1分钟),可缩短至30秒(不要过短,避免资源占用过高),降低扫描时机与文件未写完的重叠概率。验证权限配置:
确保SSIS执行账户(通常是SQL Server Agent服务账户)对临时目录和Pickup目录都拥有完全控制权限,避免写入/移动时因权限不足导致文件异常。启用SMTP日志定位细节:
打开SMTP服务器属性→「诊断」选项卡,勾选「启用日志记录」,日志格式选「W3C扩展日志文件格式」,指定日志存储路径。再次出现失败时,查看日志中的具体错误条目,确认是否为锁定、权限或其他异常。确保文件名唯一:
生成邮件文件时用时间戳+随机字符串命名(如mail_202405201545_789xyz.txt),避免文件名冲突导致SMTP处理异常。
内容的提问来源于stack exchange,提问作者btorkelson
相关产品推荐
相关产品推荐

