2009-04-23 17 views
3

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

为了管理这些附件,我们称他们为1.jpg2.doc ... n.ext其中n是在我们持有的该文件的其他信息的数据库的一个关键,例如其原文件名。

我可以使用代码:

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

到指定文件,但随后被附加到电子邮件为1.doc。无论如何,我可以重写这个,并指定我自己的文件名与文件分开吗?

回答

1

的ColdFusion 2016添加了这个名为filename新属性来覆盖在文件属性中指定的文件名。样本例如低于

<cfmail from="[email protected]" subject="filename test" to="[email protected]" username="[email protected]" 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

1

当前唯一的方法是使用cffile并在临时目录中创建该文件的副本,重命名并附加该文件。然后你只想在完成后删除文件。我不认为有附加文件的方法,但在附加到电子邮件时将其称为不同。

4

瑞恩的建议可能是最简单的解决方案。如果您使用CF 8.01,则可以使用cfmailparam的新remove属性。你有cffile更名为您的附件,并通过他们cfmailparam后,ColdFusion的从磁盘删除当他们一旦被邮件池处理:

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

(8.01版本之前,你必须确保您的应用程序在Coldfusion的邮件缓冲区完成之前并未删除临时文件。)

或者,您可以调用Coldfusion的底层Java并使用附件从内存中构建您的电子邮件,只需使用您喜欢的任何名称。有关CF 7.02的示例,请查看Dan Switzer's blog

+0

这几乎是我最终做的,而不是将文件写入磁盘并删除它我使用CF8中的content属性来处理大部分这种情况,只需在文件中读入二进制变量然后用信件cfmailparam写出来。 – Loftx 2009-04-24 08:23:38

+0

我应该注意的是,我真的在寻找一种解决方案,它不涉及读取文件(也可能写出文件),因为我认为这可能会导致大量文件的Coldfusion流失,所以需要重新命名附件仍然是优选的。 – Loftx 2009-04-24 08:26:06

1

如果你正在运行8.0.1(做cfdump VAR =“#服务器#”,找出),那么这可能会使你的生活变得更轻松:

  • 的CFMAIL和cfmailparam标签现在有一个删除属性,告诉ColdFusion在成功发送邮件后删除任何附件。
  • cfmailparam标签现在具有内容属性,可以让您将ColdFusion变量的内容作为附件发送。要做到这一点,请在#标志作为内容属性值的变量,如下面的例子: 文件属性指定的文件名在邮件首部包括不ColdFusion的系统上的文件

来源:

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

7

你可以尝试添加:

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

的多个报价是故意的......我让他们中的空格 文件名。