fro*_*die 7 coldfusion file-upload email-attachments cfmail
我有一个带有文件输入的表单:
<input type="file" id="uploadFile" name="uploadFile" />
Run Code Online (Sandbox Code Playgroud)
我使用JQuery表单插件的ajaxForm方法提交表单.
然后,在处理帖子的代码中,我读取并处理该文件.我使用cfspreadsheet直接从文件输入字段读取文件:
<cfspreadsheet
action="read"
src="#form.uploadFile#"
sheet="1"
query="spreadsheetData"
headerRow="1"
excludeHeaderRow="true"
>
Run Code Online (Sandbox Code Playgroud)
一切正常.
我决定将电子表格通过电子邮件发送给管理员.我想我可以使用包含以下cfmailparam标记的cfmail标记来完成此操作:
<cfmail to="myEmailAddress@email.com"
from="fromEmail@email.com"
subject="Upload File" type="HTML">
<cfmailparam file="#form.uploadFile#" />
File processed successfully
</cfmail>
Run Code Online (Sandbox Code Playgroud)
但是,这不能正常工作 - 电子邮件不会发送.我究竟做错了什么?
Leigh的解决方案运行良好,您可能已经在代码中实现了.我以为我会把我的0.02美分用于解释为什么这是一个问题.
上载文件时,文件将放在临时文件夹位置.如果您不对文件执行任何操作以将其放在最终目标中,则文件将被删除 - 可能在您的请求结束时.
同时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
Run Code Online (Sandbox Code Playgroud)
在运行时,CF抓取此文件并执行Leigh建议的操作 - 将其作为二进制文件放置在邮件主体中的mailpart(base64编码)中.所以发生的事情是,当假脱机程序服务试图打开并附加此文件时,文件很久就消失了,因为请求已经结束.我还认为该文件在此临时目录中以".tmp"扩展名存在 - 这显然不是您想要附加的(但可能是CF的先前版本).
要修复它,首先使用带有"upload"操作的cffile将文件放在磁盘上的真实(而不是临时)文件夹中.然后使用cfmailparam附加文件.注意:设置为yes的"remove"属性将导致CF在成功发送邮件后删除该文件 - 这是我认为您正在寻找的效果.
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |