强制邮件假脱机通过代码运行

时间:2011-10-10 07:51:43

标签: coldfusion

天儿真好 有没有办法强制邮件假脱机程序运行,而不是等待CFAdmin中设置的延迟时间?

我查看了管理员API,看不到任何内容,所以我怀疑答案可能是“不”,但我想也许有人知道如何调用基础流程?

想要这样做的原因是一个边缘情况。在我们的测试服务器上,我们已经将假脱机程序设置为每15秒运行一次,这对于大多数情况来说都很好。但是,我们有越来越多的单元测试(在同一个测试服务器上运行),它检查已发送的电子邮件内容,这些内容是我们验证其完整性所需的各种元素。目前测试检查Undelivr目录,如果没有找到相关的邮件消息,则等待2秒并再次尝试,等待总共20秒,然后再决定是否需要中止测试(20秒是任意数量;假设间隔为15秒,并且一些“蠕动的房间”)。这样可以正常工作,但这意味着单元测试套件最终运行速度比实际需要的速度慢,因为这些电子邮件检查测试会暂停“最多20秒”。

这不是世界末日,但如果可能的话,这是我想要处理的事情。

我想我可以采取的一种方法是检查假脱机目录,但我宁愿等到电子邮件消息“停放”在Undelivr目录中,如果可能的话。我有点犹豫要把线轴目录中的东西弄得乱七八糟(没有明智的理由,授予)。

无论如何,除了我所有的华夫饼干,问题的简短版本是“有没有办法强制邮件假脱机通过代码运行?”。

干杯。

3 个答案:

答案 0 :(得分:1)

<cfobject action="CREATE"
   type="JAVA"
   class="coldfusion.server.ServiceFactory"
   name="factory">

<cfset MailSpoolService = factory.getMailSpoolService()> 
<cfset MailSpoolService.restart()>

答案 1 :(得分:1)

好的,我从其中一位Adobe工程师那里获得了官方记录:基本上我正在尝试做的事情就像现在一样无法完成。

有一种重新运行电子邮件假脱机的方法,但它对邮件假脱机服务是私有的。

哦,好吧。

为每个为我而调查此事的人欢呼提出了建议。

答案 2 :(得分:0)

  

有一种重新运行电子邮件假脱机的方法,但它是私有的   邮件假脱机服务。

正如我在评论中提到的,您可以通过将其可访问性设置为true来调用私有方法。不是你想做什么“不知道”,但可能没有单位测试。

免责声明:我不会发誓这些是正确的方法。但它似乎确实在我的简短测试中启动了邮件处理。

<cfscript>
    // Tested with CF 9.0.1
    factory = createObject("java", "coldfusion.server.ServiceFactory");
    spoolService = factory.getMailSpoolService();
    spoolClass = spoolService.getClass();

    methodToCall = spoolClass.getDeclaredMethod("refreshSpoolFiles", []);
    methodToCall.setAccessible(true);
    methodToCall.invoke(spoolService,  []);

    methodToCall = spoolClass.getDeclaredMethod("deliverStandard", []);
    methodToCall.setAccessible(true);
    methodToCall.invoke(spoolService,  []);
</cfscript>