2011-03-04 86 views
6

我使用php内部邮件功能发送邮件,我把它封装在一个函数里面,在UTF8的过程中,我发现它在线。PHP UTF8邮件在iPhone邮件应用程序中出现乱码

它的工作原理是,我将代码中的电子邮件发送到我的GMAIL和我的EXCHANGE服务器,无论是GMAIL还是我PC上的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 ("[email protected],[email protected]", "שלום", $mymessage, "my_mail", "[email protected]"); 


?> 
+0

顺便说一句,我不认为你需要的'
发送'text/plain'电子邮件时,'PHP_EOL'可能会更好。 – Czechnology 2011-03-04 12:36:44

+0

其实我想发送HTML,我只是复制了错误的头在这个例子中 – 2011-03-04 13:29:39

回答

1

我得到了同样的问题,与iPhone和交流,我解决了使用 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 ("[email protected],[email protected]", "שלום", $mymessage, "[email protected]"); 
0

答案很简单 - 使用Swift Mailer。电子邮件中的标题魔法是不可预知的。我也尝试过一段时间,但迟早会有人报告他在他的设置(电子邮件提供商或应用程序),文本是乱码或什么(我发送了很多电子邮件在捷克,所以工作UTF是一个优先事项)。

使用Swift Mailer并保存自己的一些神经。安装和学习的速度非常快,效果很好。

+0

的邮件包装像您提供或PHPMailer的将工作之一,但不是这一特定问题的解决方案。特别是如果代码完全工作重构与包装工作,它可能比修复bug更多的工作。 – dtech 2011-03-04 14:50:54

+1

我试图PHPMailer的,另一种包装,它发送邮件,我得到了完全相同的结果......还是乱码... – 2011-03-04 22:43:40

+0

@Moshe马西亚诺,在这种情况下,我不能帮助你更多,我没有太多的与iProducts经验,并与他们的内部... – Czechnology 2011-03-04 23:02:37

1

因为邮件通过您的iPhone正确接收到您的Gmail帐户,这可能是交换服务器上或iPhone Exchange同步中的错误/错误配置。

要做的最好的事情是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); 
} 
+0

想你的代码,GMAIL了它的权利,Outlook和iPhone得到了所有它的身体现在出现乱码,甚至拉丁文字... – 2011-03-04 13:24:35

+1

的我使用雷鸟发送消息,并得到了与iPhone的Gmail帐户阅读他们相同的症状。在我的例子中,定义了Content-Transfer-Encoding:8bit,所以看起来传输编码不是问题的根源。请参阅http://www.google.com/support/forum/p/gmail/thread?tid=0cb7a810647d9dd8和http://forum.nuevasync.com/forum/posts/list/15/118.page – 2011-05-25 11:29:28

+0

警告任何使用此方法的人:base64_encoding使得您的电子邮件更有可能最终进入垃圾邮件/批量过滤器,因为base64编码的主体是垃圾邮件过滤器的红旗。 – 2016-01-14 16:40:02