我有一个带有文件输入的表单:
<input type="file" id="uploadFile" name="uploadFile" />
我使用JQuery form plugin的ajaxForm方法提交表单。
然后,在处理帖子的代码中,我读取并处理该文件。我使用cfspreadsheet直接从文件输入字段读取文件:
<cfspreadsheet
action="read"
src="#form.uploadFile#"
sheet="1"
query="spreadsheetData"
headerRow="1"
excludeHeaderRow="true"
>
这一切都正常。
我决定将电子表格通过电子邮件发送给管理员。我想我可以使用包含以下cfmailparam标记的cfmail标记来完成此任务:
<cfmail to="myEmailAddress@email.com"
from="fromEmail@email.com"
subject="Upload File" type="HTML">
<cfmailparam file="#form.uploadFile#" />
File processed successfully
</cfmail>
但是,这不能正常工作 - 电子邮件不会发送。我做错了什么?
答案 0 :(得分:9)
Leigh的解决方案运行良好,您可能已经在代码中实现了。我以为我会把我的0.02美分用于解释为什么这是一个问题。
上传文件时,文件将放在 temp 文件夹位置。如果您不对文件执行任何操作以将其放入最终目标,则文件将被删除 - 可能在您的请求结束时。
同时cfmailparam实际上并没有在运行时附加文件。它留给假脱机程序进程来做到这一点。如果您查看ColdFusion安装“mail / spool”目录,您将看到一个扩展名为.cfmail的文件。如果你不能在发货之前“抓住”一个检查你无法送达的文件夹 - 那里肯定会有一些闲逛。
.cfmail文件用作发送邮件的后台处理程序服务的指令。它有一个主题,从,到服务器地址,正文等。
如果您附加了一个文件,您会在此文件的底部看到如下所示的内容:
file: D:\jrun\temp\blah.tmp
file-type: application/octet-stream; name="I am the file you uploaded.tmp"
file-disposition: attachment
remove: false
在运行时,CF抓取此文件并执行Leigh建议的操作 - 将其作为二进制文件放置在邮件的主体中,并使用mailpart(base64编码)。所以发生的事情是,当假脱机程序服务试图打开并附加此文件时,文件很久就消失了,因为请求已经结束。我还认为该文件在此临时目录中以“.tmp”扩展名存在 - 这显然不是您想要附加的(但可能是CF的先前版本)。
要修复它,首先使用带有“upload”操作的cffile将文件放在磁盘上的真实(而不是临时)文件夹中。然后使用cfmailparam附加文件。注意:设置为yes的“remove”属性将导致CF在成功发送邮件后删除该文件 - 这是我认为您正在寻找的效果。