在phpmailer中设置附件的编码

时间:2017-11-06 10:52:02

标签: php phpmailer

我使用phpmailer发送月度报告。

它包括€符号。因此我需要将编码设置为utf-8。 我在这里碰到了一个问题。

没有这样的编码:

$mail->addStringAttachment($csvstring, $fileName);

邮件已发送,但在附件中,€符号未显示

当我尝试添加编码时:

$mail->addStringAttachment($csvstring, $fileName,  "utf-8", "text/csv");

邮件已发送,但正文和附件不存在。 我尝试查找它,但似乎很少有文档。

我错过了明显的吗?

2 个答案:

答案 0 :(得分:0)

请参阅:this line in PHPMailer's source code

$mail->CharSet = 'utf-8';

如果要在打开CSV的程序中将CSV读取为UTF-8,请将BOM(Byte Order Marker;即"\\xef\\xbb\\xbf")添加到字符串文件内容中。

"\\xef\\xbb\\xbf".$csvstring

<强>更新

您也可以这样做。

$mail->addStringAttachment($csvstring, $fileName, "base64", "text/csv; charset=utf-8");

另请参阅MIME Content-Type上的规范,因为它指出了设置编码的正确方法;即,text/csv; charset=utf-8

答案 1 :(得分:0)

你感到困惑。 EncodingCharSet是两回事。通常,charset不会影响附件,因为它们通常是base-64编码的,因此只有7位。

您可以为整封邮件设置总体CharSetEncoding,但您可以覆盖每个附件的整体编码。

根据the docs附加内容的正确方法:

$mail->addStringAttachment($csvstring, $fileName, 'base64', 'text/csv');

使用该模式,附件将保留您传递给它的确切二进制内容 - 如果您仍然遇到字符问题,则源数据存在问题,而不是导致它的发送问题。