让phpmailer支持中文名称的附件和邮件标题中文乱码(转)

让phpmailer支持中文名称的附件和邮件标题中文乱码(转)

邮差的信 提交于 2019-12-06 20:14:59
<?php phpmailer设置使用utf-8编码发送邮件以后,已经能够正常的发送中文邮件了,当然你调用时传进去的中文参数必须也是utf-8编码才行,但是我发现,即使这样,发送中文文件名的附件的时候,附件名称不能正确的显示。 比如我们要发送的附件是“测试.txt”,如果在添加附件的时候强制使用指定文件名的方式: $mail ->AddAttachment( $attach , $attach ); 那么发送过去的附件文件名将会是乱码,如果不指定: $mail ->AddAttachment( $attach , $attach ); 那么发送过去的文件名中的中文干脆没了,成了“.txt”。 究其原因,打开class.phpmailer.php,在大概第1007行左右,函数AddAttachment中,有一句 $filename = basename ( $path ); 原因就在这里,现在我们使用的php 5.1.2,包括他以前的很多版本,basename函数和dirname函数都是不支持中文文件名的,所以一解析就把中文给过滤掉了。而如果强行指定文件名为什么还乱码呢,这是因为phpmailer虽然会自动根据你设定的编码方式给主题、正文进行utf-8编码化,但是却不会给附件的文件名编码。现在,只需要修改上面这一句,就能够同时解决这两方面的问题了。修改结果如下: //