我正在尝试通过PHP脚本发送多部分/备用MIME电子邮件...一切正常但我在编码方面遇到了一些问题!电子邮件正文中突出显示的字符在邮件客户端中显示错误!如何编码身体来解决这个问题? ... 我试过用..
utf8_encode($body)
没有好结果!
在某些原始格式的电子邮件中,我注意到重音被替换为= XX(其中XX是字母数字字符)...我该怎么做?
提前致谢!
这是代码:
$header = "From: \n";
$header .= "Reply-To: \n";
$header .= "Content-Type: multipart/alternative; boundary=$alt_boundary\n";
$header .= "Mime-Version: 1.0\n";
$header .= "X-Mailer: PHP/".phpversion()."\n";
$body .= "\n".wordwrap($txt_body, 70);
$body .= "\n\n--$alt_boundary\n";
$body .= "Content-Type: multipart/mixed; boundary=$mixed_boundary\n";
$body .= "\n\n\n--$mixed_boundary\n";
$body .= "Content-Type: text/html; charset=utf-8\n";
$body .= "Content-Transfer-Encoding: 7bit\n";
$body .= "\n".wordwrap($html_body, 70);
$body .= "\n\n\n--$mixed_boundary\n";
$body .= "Content-Disposition: attachment filename=\"test file\"\n";
$body .= "Content-Type: application/octet-stream; x-unix-mode=0644; name=\test file\"\n";
$body .= "Content-Transfer-Encoding: 7bit\n";
$body .="\n$file";
$body .= "\n\n--$mixed_boundary--";
$body .= "\n\n--$alt_boundary--";
mail($to, $subject, $body, utf8_encode($header));
修改
$txt_body
和$html_body
是两个文件的内容:
$txt_body = file_get_contents(...);
$html_body = file_get_contents(...);
在那些文件中,我替换了我通过IPN从PayPal收到的一些信息。我注意到,当我收到电子邮件时,只会错误地显示IPN信息中出现的重音(换句话说,我在文件内容中替换的附加信息)!其他突出的字符正确显示!!
我该如何解决这个问题?
解决:
我已经解决了这个问题! utf8_encode()函数必须只应用于教皇信息变量,事实上我尝试在utf8中编码$ txt_body ... paypal变量在utf8中被编码2次。换句话说,我已经做到了:
$txt_body = utf8_encode(file_get_contents(...));
$html_body = utf8_encode(file_get_contents(...));
而且在$ txt_body和$ html_body中我已经取代了通过IPN收到的信息!
感谢ererybody!
答案 0 :(得分:2)
您需要声明您在该特定部分的标题中使用的字符编码:
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary=boundary
--boundary
Content-Type: text/plain; charset=utf-8
This part uses UTF-8.
--boundary
Content-Type: text/plain; charset=iso-8859-1
This part uses ISO 8859-1.
--boundary--
答案 1 :(得分:0)
可以使用SwiftMailer
轻松创建utf-8编码的多部分邮件$message->addPart($txt_body, 'text/plain', 'utf-8');
$message->addPart($html_body, 'text/html', 'utf-8');
$message->attach(Swift_Attachment::fromPath('/path/to/testfile'));