Windows 服务器上的 ColdFusion 2016 中的 CFMail 附件文件名损坏

CFMail attachment filename broken in ColdFusion 2016 on Windows server

我正在将网站从 Linux 的 CF10 移动到 Windows 的 CF2016,并且 运行 遇到了 cfmail 文件附件的问题。

我将文件附加到 cfmail 中;

<cfmailparam file="#FileName#">

并且还尝试了有和没有性格和类型的变体,例如:

<cfmailparam file="#FileName#" disposition="attachment; 
         filename=""#FileName#""" 
         type="#ContentType#/#ContentSubType#">

但无论如何,在 Windows 的 CF2016 上,我在 Outlook 中的附件名称显示为 ATT00160.dat(未设置类型)或 ATT00169.xlsx(已设置类​​型)

似乎超过一定长度的文件名导致了这个问题。 64 个字符的文件名会破坏它,但较小的文件名,比如 49 个字符,则不会。

在 Outlook 中查看邮件来源,从 Windows 发送的 cfmail,我看到以下值。注意 content-type 下的名称已拆分?

Content-Type: application/octet-stream; 
    name*0=BLAH_BLAH1_Ownership_Database_Issue_2018-01_In_Development2.; 
    name*1=xlsx
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename*0=BLAH_BLAH1_Ownership_Database_Is;
 filename*1=sue_2018-01_In_Development2.xlsx

使用 cfmail 发送的相同附件,来自 Linux,给我:

Content-Type: application/octet-stream; 
    name=BLAH_BLAH1_Ownership_Database_Issue_2018-01_In_Development2.xlsx
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename*0=BLAH_BLAH1_Ownership_Database_Is;
 filename*1=sue_2018-01_In_Development2.xlsx

请注意 content-type 名称尚未拆分。

有人对如何解决这个问题有任何想法吗?

所以,我终于整理好了。您需要手动将文件名放在类型中:

<cfmailparam file="#FileName#" 
      type="#ContentType#/#ContentSubType#;name=""#FileName#""">

我以前从来不需要这样做。我不知道这是 Windows 服务器、CF2016 还是 SmarterMail(我们的邮件服务器),但如果你 运行 遇到同样的问题,以上对我有用。

您可能还会看到我向 Adob​​e Bug tracker 提交的报告。自从 Coldfusion 切换到较新的 Javamail 后,我就遇到了长文件名附件的问题。

https://tracker.adobe.com/#/view/CF-4199784