通过邮件 mime php 来自附件的文件名

Posted

技术标签:

【中文标题】通过邮件 mime php 来自附件的文件名【英文标题】:File name from attachment via mail mime php 【发布时间】:2013-01-22 17:52:02 【问题描述】:

我在通过 mime 邮件发送的附件中使用长文件名时遇到问题。

当我使用短名称时,例如:rapport.pdf 它可以正常工作。

但是当我开始使用像rapport_2013_rapport_2013_rapport_2013_rapport_2013_rapport_2013_.pdf 这样的长文件名时,在将文件发送到电子邮件时,文件会获得一个新名称(无标题附件xxxxx.pdf)。

有没有办法解决这个问题?我已经尝试将编码更改为内联或附件。 这是我使用的代码:

 $mime = new Mail_Mime();
 $mime->sethtmlBody($htmlMessage);
 $mime->addAttachment($pdfcontent, 'application/pdf', 'factuur_QW'.$fcnr.'.pdf', false, 'base64');
 $body = $mime->get();
 $hdrs = $mime->headers($headers);
 $mail = &Mail::factory('mail');
 $mail->send($to, $hdrs, $body); 

【问题讨论】:

您使用什么发送电子邮件?我们可以看看一些代码吗? 我刚刚添加了一段代码。 我还发现了重音字符的问题。我敢打赌,文件名不超过 64 个字符,不带重音 【参考方案1】:

我偶然发现了这篇文章:Is there any limit on the maximum length of filename while sending attachments?

这表明如果编码得当,您可以拥有更长的文件名。试试:

$mime->addAttachment($pdfcontent, 'application/pdf', 'factuur_QW'.$fcnr.'.pdf', false, 'base64', 'attachment', '', '', '', 'encoded-word', null, '=?utf-8?B' . base64_encode('factuur_QW'.$fcnr') . '?=', null);

根据指定的 mime 类型,“.pdf”将添加到附件文件名中。如果字符在 Ascii 字符集中,也不需要使用 base64 对附件名称进行编码。在这种情况下,替换 '=utf-8?B?' '=utf-8?Q?'。

【讨论】:

以上是关于通过邮件 mime php 来自附件的文件名的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 的邮件正文中的 MIME 信息

PHP不发送带有附件的邮件

如何在 Mime php 中创建和附加带有电子邮件的 excel 文件

使用 S/MIME (PHP) 发送带有附件的电子邮件

如何解码 [MIME] java 邮件中的附件文件

使用 utf-8 文件名发送 MIME 编码的电子邮件附件