PHP UTF8邮件在iPhone邮件应用程序上出现乱码

时间:2011-03-04 12:19:39

标签: php iphone email utf-8

我正在使用php内部邮件功能发送邮件,我把它包装在UTF8的一个功能的过程中,我在网上找到了它。

它有效,我将代码中的电子邮件发送到我的GMAIL和我的EXCHANGE服务器,无论是在我的PC上的GMAIL还是我的Outlook客户端,我都得到了正确的信息。

我的iPhone也连接到了Exchange和GMAIL帐户,因此我在iPhone上收到了这两条消息。 iPhone正确收到GMAIL消息,但EXCHANGE帐户显示带有乱码乱码文本的消息,其中包含非拉丁字符。

以下示例在主题和正文中发送希伯来字符。在我的iPhone上,主题在希伯来语中被正确接收,但是消息正文中的希伯来语部分是乱码。

有人可以对此发表评论吗?也许可以在自己的设置上试试?

感谢,

<?php


function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') { 
$header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' .   "\r\n"; 
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header);  
}

$mymessage = "Hello <BR>"; 
$mymessage.= "Received: now<BR/><BR/>";
$mymessage.= "details: שלום שלום<BR/><BR/>";

mail_utf8 ("XXX@gmail.com,XXX@exchangeServer.com", "שלום", $mymessage, "my_mail", "mailer@phpmail.com");


?>

3 个答案:

答案 0 :(得分:1)

由于通过iPhone在您的Gmail帐户上正确收到邮件,因此可能是Exchange服务器或iPhone Exchange同步中的错误/配置错误。

最好的办法是base64编码不仅是主题而是整个消息:base64使用的字符几乎总是正确传输,因为字符代码在US-ASCII,ISO-8859-x和UTF中是相同的-8。所有现代邮件客户端都可以解码base64,但它确实会使邮件大小增加约33%。

 function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') { 
      $header_ = 'MIME-Version: 1.0' . "\r\n" .
                 'Content-type: text/plain; charset=UTF-8' .   "\r\n" .
                 'Content-Transfer-Encoding: base64' . "\r\n"; 
      mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', base64_encode($message), $header_ . $header);  
 }

答案 1 :(得分:1)

我遇到了与iPhone和Exchange相同的问题,我解决了我的问题 Content-Transfer-Encoding: quoted-printable\r\nquoted_printable_encode() 以这种方式尝试你的代码:

function mail_utf8($to, $subject = '(No subject)', $message = '', $from ='') { 
  $headers = "MIME-Version: 1.0\r\n";
  $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  $headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
  $headers .= "From: $from\r\n";
  mail($to, $subject, $message, $headers);  
}
$mymessage = "Hello <BR>"; 
$mymessage.= "Received: now<BR/><BR/>";
$mymessage.= "details: שלום שלום<BR/><BR/>";
$mymessage = quoted_printable_encode($mymessage);

mail_utf8 ("XXX@gmail.com,XXX@exchangeServer.com", "שלום", $mymessage, "mailer@phpmail.com");

答案 2 :(得分:0)

简单回答 - 使用Swift Mailer。电子邮件中的标题魔法是不可预测的。我也试过玩它一段时间,但迟早有人报告说他的设置(电子邮件提供商或应用程序),文字乱码或者其他东西(我发了很多电子邮件)在捷克,所以工作的UTF是一个优先事项。)

使用Swift Mailer并省去一些神经。它的设置和学习速度很快,效果很好。