IIS/SMTP - 由于文件锁定,无法从 inetpub/mailroot/Queue 移动电子邮件

IIS/SMTP - 由于文件锁定,无法从 inetpub/mailroot/Queue 移动电子邮件

我有一个监听器,用于处理inetpub/mailroot/Queue目录中的电子邮件。监听器处理完电子邮件后,会继续将电子邮件移动到另一个目录。但是,由于进程锁定了文件,因此无法移动电子邮件inetinfo.exe。我注意到,该文件锁定会在几小时到几天的一段时间后释放。您可以看到,Queue随着时间的推移,目录会变得非常满。

我能解决此问题的唯一方法是手动停止并启动 IIS 中的 SMTP 虚拟服务器。

是否可以通过编程方式释放此文件锁?如果不行,是否可以加快释放此文件锁?

更新

监听器会监控Queue文件夹中的来信,然后处理这些邮件。然后,邮件中的数据会被插入到我们的内部程序中。监听器处理完邮件后,会将邮件移至其他地方的成功或失败目录。

解决了

近一年后,我再次遇到这个问题,终于解决了!解决方案是配置 SMTP 虚拟服务器的本地(默认)域,并将其设置为我想要处理的电子邮件的相应域。这样电子邮件就会进入文件夹,在那里Drop可以自由操作,而不必担心进程锁定。

答案1

“队列”目录供 SMTP 服务器进程内部使用。您发现文件被锁定在那里,因为您不应该在那里处理它们。如果您的“队列”目录已满,那么您最好弄清楚为什么电子邮件传递失败。我不清楚旧的SMTPDiag 工具微软的 Windows Server 2008 可能可以运行,但它只是一个起点。

更新:

我不清楚你到底想用你的处理任务做什么。“队列”文件夹用于保存等待传递的消息。已接受本地传递的消息存储在“丢弃”文件夹中。假设你正在寻找已接受本地传递的消息,我会担心为什么它们会停留在“队列”中而不是“丢弃”中。除非出现问题,否则不应该在“队列”中堆积文件。

(顺便说一句:查找有关 Windows Server 2008 中的 SMTP 服务的文档变得相当困难。SMTP 服务一直有点孤儿的感觉,生活在 Windows 操作系统和 Exchange 之间的阴间。>叹息<)

答案2

注册表中有一些参数可以控制锁定时间......

但为了保持简单...

只需重新启动 IIS(如每‘n’分钟执行一次的计划任务),如果您使用的是 IIS 7.0,请按照这种方式执行...

// stop iis and other web services
net stop WAS

// 
( pause a few seconds, +30s )
>>> Do your processing... files should be released now...

// start iis and web services
net start W3SVC

相关内容