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(我们的邮件服务器),但如果你 运行 遇到同样的问题,以上对我有用。
您可能还会看到我向 Adobe Bug tracker 提交的报告。自从 Coldfusion 切换到较新的 Javamail 后,我就遇到了长文件名附件的问题。
我正在将网站从 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(我们的邮件服务器),但如果你 运行 遇到同样的问题,以上对我有用。
您可能还会看到我向 Adobe Bug tracker 提交的报告。自从 Coldfusion 切换到较新的 Javamail 后,我就遇到了长文件名附件的问题。