ColdFusion邮件队列停止处理

时间:2020-03-06 14:22:35  来源:igfitidea点击:

我们的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>