在CFMail中更改附件的文件名

时间:2009-04-23 14:41:01

标签: email coldfusion filenames attachment cfmail

我正在尝试使用ColdFusion发送包含存储在我们服务器上的附件的电子邮件。

要管理这些附件,我们称之为1.jpg2.doc ... n.ext其中n是数据库中的密钥,我们在其中保存有关文件的其他信息,例如作为其原始文件名。

我可以使用代码:

<cfmailparam file="c:\path\1.doc">

指定文件,但随后将其作为1.doc附加到电子邮件中。无论如何我可以覆盖它并从文件中单独指定我自己的文件名吗?

6 个答案:

答案 0 :(得分:7)

您可以尝试添加:

<cfmailparam 
file="#actual_file_name#" 
disposition="attachment; filename=""#changed_file_name#""">

多个引号是故意的......我们在文件名中允许使用空格。

答案 1 :(得分:4)

Ryan的建议可能是最简单的解决方案。如果您使用的是CF 8.01,则可以使用cfmailparam的新remove属性。在您使用cffile重命名附件并将其传递给cfmailparam后,Coldfusion会在邮件假脱机处理完毕后将其从磁盘中删除:

<cfmailparam file="#File_path#" remove="true" />

(在版本8.01之前,你必须确保你的应用程序在Coldfusion的邮件假脱机完成之前没有删除临时文件。)

或者,您可以调用Coldfusion的底层Java,并使用内存中的附件构建您的电子邮件消息,无论您喜欢什么名称。查看Dan Switzer's blog以获取有关CF 7.02的示例。

答案 2 :(得分:1)

目前执行此操作的唯一方法是使用cffile并在临时目录中创建该文件的副本,重命名该文件然后附加该文件。然后,您只想在完成后删除该文件。我认为没有办法附加文件,但在附加到电子邮件时称之为不同的文件。

答案 3 :(得分:1)

如果您正在运行8.0.1(请参阅cfdump var =“#server#”以查找),那么这可能会让您的生活更轻松:

  • cfmail和cfmailparam标签现在有一个remove属性,告诉ColdFusion在成功发送邮件后删除任何附件。
  • cfmailparam标记现在有一个content属性,允许您将ColdFusion变量的内容作为附件发送。为此,请将#igns中的变量指定为内容属性值,如下例所示: file属性指定要包含在邮件头中的文件名,而不是ColdFusion系统上的文件

自:

http://www.adobe.com/support/documentation/en/coldfusion/801/cf801releasenotes.pdf

答案 4 :(得分:1)

从CF8开始,您可以按照http://www.bennadel.com/blog/1220-coldfusion-cfmailparam-s-new-content-attribute-is-awesome.htm

使用文件和内容
<cfmailparam
    file="someNiceName.doc"
    content="#fileRead( yourNastyFileName.doc )#"
/>

答案 5 :(得分:1)

ColdFusion 2016添加了一个名为filename的新属性来覆盖文件属性中指定的文件名。示例如下

<cfmail from="john@sample.com" subject="filename test" to="joanna@sample.org" username="john@sample.com" password="password" server="localhost" spoolenable="false">
    <cfmailparam file="c:\Book2.xlsx" filename="Offers.xlsx">
Check out the new offers sheet
</cfmail>

现在,当邮件发送给用户时,他/她会将其视为Offers.xslx而不是Book2.xslx。有关详情,请访问https://tracker.adobe.com/#/view/CF-4019518