使<cfmail>等到文件准备就绪

时间:2016-10-20 14:09:35

标签: coldfusion

我有一个生成Excel文件的函数(使用ColdFusion的电子表格函数)并将结果存储为ReportContent

我需要使用<cfmail>

将该报告发送给一群人
<cfmail from="#From#" to="#To#" subject="#Subject#" type="html" >
    <cfmailparam content="#ReportContent#" type="application/vnd.ms-excel" file="#FileName#" >
    #Body#
</cfmail>

我的问题是,在测试中,我发现<cfmail>命令通常会在Excel文件完全呈现之前执行,而是附加一个不可用的.tmp文件。

我试图通过暂停执行5秒来处理这个问题,给Excel文件时间渲染:

<cfscript>
    thread = CreateObject("java", "java.lang.Thread");
    thread.sleep(5000);
</cfscript>

这在大多数情况下有效,但在100%的时间内无效。我现在已经将延迟时间提高到15秒 - 这适用于我当前的测试,但我不相信这是最好的策略。

在调用ReportContent之前,有没有办法确认<cfmail>中的Excel文件已完全呈现?

1 个答案:

答案 0 :(得分:0)

使用这样的命名锁,看看是否有帮助:

<cflock name="some_preferably_unique_lock_name" type="exclusive" timeout="60">
<!--- code that creates and writes the Excel file to disk --->
</cflock>

<cflock name="same_preferably_unique_lock_name" type="exclusive" timeout="60">
<!--- code that mails the Excel file as attachment --->
</cflock>