多部分邮件 - 重点问题

时间:2009-07-18 09:50:08

标签: php utf-8 email mime mailto

我正在尝试通过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!

2 个答案:

答案 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'));