ColdFusion邮件队列停止处理
我们的CF服务器有时会停止处理邮件。这是有问题的,因为我们的许多客户都依赖它。
我们在网上找到了一些建议,这些建议提到了undeliverable文件夹中的零字节文件,因此我创建了一个任务,每三分钟删除一次。但是,再次发生了停止。
我正在寻找诊断和解决此问题的建议。
- CF 8标准
- Win2k3
添加:
- 队列失败时,邮件日志中没有错误
- 由于我们发送了大量邮件,因此我们没有尝试不使用队列来运行它
新增2:
- 假脱机文件夹中的任何文件似乎都不是问题。当我们重新启动邮件队列时,它们似乎都可以正确处理。
新增3:
- 我们没有使用附件。
解决方案
我们是否尝试过完全绕过队列? (在CF管理员的"邮件假脱机设置"下,取消选中"假脱机发送邮件"。)
有时我也遇到同样的问题,尽管过去确实出现了这个问题,但这不是由于零字节文件引起的。似乎一两个文件(文件夹中最旧的文件)将使队列无法处理。我要做的是将所有邮件移到保留文件夹中,重新启动邮件队列,并按相反的时间顺序一次将邮件复制回到大块中,等待它们出去并移到其他位置。阻止队列的邮件被放在一个单独的文件夹中,以便稍后进行检查。
我们可能可以通过编程方式执行以下操作:停止队列,将最早的文件移动到另一个文件夹,然后启动邮件队列,并通过检查文件夹文件的数量和日期来查看发送是否成功开始。如果删除最旧的文件不起作用,请重复前面的过程,直到所有有问题的邮件文件都移走并且发送成功为止。
希望能对我们有所帮助。
邮件后台处理程序和CFMX 8中带有附件的邮件有问题,该问题已通过修补程序之一修复。至少应在8.0.1版中对此问题进行修复。
We have not tried to run this without using the queue, due to the large amount of mail we send
无论如何,我们是否尝试过关闭后台打印?我已经看到邮件在半秒内以500-600条消息的速度发送,这在一个糟糕的服务器上。如果标准页面超时时间为60秒,那么在页面超时之前,我们可以发送约72,000封电子邮件。我们一次发送的邮件数超过72,000吗?
在CFMail之前我这么快使用的另一种方法是构建自定义后台处理程序。将电子邮件保存到数据库表中,而不是即时发送电子邮件。然后设置一个计划的作业以发送几百条消息,并在几分钟后重新安排自身的时间,直到表为空。
我们计划该作业每天运行一次;如果表不为空,它可以将自身重新安排为在几分钟后再次运行。从来没有问题。
我们最终要做的是:
我写了两个预定任务。第一个检查队列队列中是否有任何消息早于n分钟(当前设置为30)。第二个命令每天晚上在使用率较低时重置队列。
不幸的是,我们从未真正发现队列为什么会脱离轨道,但是它似乎仅在使用Exchange时发生-我们尝试过的其他邮件服务器没有此问题。
编辑:我被要求发布我的代码,所以这是当发现旧邮件时重新启动的代码:
<cfdirectory action="list" directory="c:\coldfusion8\mail\spool\" name="spool" sort="datelastmodified"> <cfset restart = 0> <cfif datediff('n', spool.datelastmodified, now()) gt 30> <cfset restart = 1> </cfif> <cfif restart> <cfset sFactory = CreateObject("java","coldfusion.server.ServiceFactory")> <cfset MailSpoolService = sFactory.mailSpoolService> <cfset MailSpoolService.stop()> <cfset MailSpoolService.start()> </cfif>