天儿真好 有没有办法强制邮件假脱机程序运行,而不是等待CFAdmin中设置的延迟时间?
我查看了管理员API,看不到任何内容,所以我怀疑答案可能是“不”,但我想也许有人知道如何调用基础流程?
想要这样做的原因是一个边缘情况。在我们的测试服务器上,我们已经将假脱机程序设置为每15秒运行一次,这对于大多数情况来说都很好。但是,我们有越来越多的单元测试(在同一个测试服务器上运行),它检查已发送的电子邮件内容,这些内容是我们验证其完整性所需的各种元素。目前测试检查Undelivr目录,如果没有找到相关的邮件消息,则等待2秒并再次尝试,等待总共20秒,然后再决定是否需要中止测试(20秒是任意数量;假设间隔为15秒,并且一些“蠕动的房间”)。这样可以正常工作,但这意味着单元测试套件最终运行速度比实际需要的速度慢,因为这些电子邮件检查测试会暂停“最多20秒”。
这不是世界末日,但如果可能的话,这是我想要处理的事情。
我想我可以采取的一种方法是检查假脱机目录,但我宁愿等到电子邮件消息“停放”在Undelivr目录中,如果可能的话。我有点犹豫要把线轴目录中的东西弄得乱七八糟(没有明智的理由,授予)。
无论如何,除了我所有的华夫饼干,问题的简短版本是“有没有办法强制邮件假脱机通过代码运行?”。
干杯。
答案 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>