file-upload - 为什么我不能将上传的文件附加到电子邮件中?

标签 file-upload coldfusion email-attachments cfmail

我有一个带有文件输入的表单:

<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>

但是,这无法正常工作 - 未发送电子邮件。我究竟做错了什么?

最佳答案

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

在运行时 CF 抓取这个文件并执行 Leigh 的建议 - 将它作为带有邮件部分(base64 编码)的二进制文件放入消息的主体中。所以发生的事情是,当假脱机服务开始尝试打开并附加此文件时,该文件早已消失,因为请求已结束。我还认为该文件在这个临时目录中以“.tmp”扩展名存在 - 这显然不是您想要附加的(但这可能是以前版本的 CF)。

要修复它,首先使用 cffile 和“上传”操作将文件放在磁盘上的真实(而不是临时)文件夹中。然后使用 cfmailparam 附加文件。注意:“remove”属性设置为 yes 将导致 CF 在成功发送邮件后删除文件 - 我相信这是您正在寻找的效果。

关于file-upload - 为什么我不能将上传的文件附加到电子邮件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301236/

相关文章:

python-3.x - 电子邮件未发送excel附件

PHP文件上传。发布与放置?

performance - Grails文件上传:Tomcat内存耗尽

excel - Coldfusion - 内存高效的 xlsx/excel 生成

concurrency - 您如何在 ColdFusion 应用程序中使用 CFThread?

Java邮件 : inline image in email

javascript - 在 extjs3.4 中使用 FileUploadField 扩展

javascript - 在 javascript(react) Web 应用程序中上传视频时的视频压缩

javascript - 使用 window.open() 打开文件时传递 url 参数(从 ColdFusion 页面)

php - 在 Thunderbird 中使用 Content-ID 和 cid 嵌入电子邮件图像