我在编码方面遇到了一个奇怪的问题,描述如下:
现在,在电子邮件主题中,"显示为"。。电子邮件通过php邮件功能发送。
在邮箱中查看电子邮件时,它会正确显示。然而,当任何人打开电子邮件时,"会突然变为"。
Uw contact met Meeùs
应该是
Uw contact met Meeùs
我已经使用了编码。
$emailsubject
包含上述电子邮件主题。
$subject=$emailsubject;
$subject=$emailsubject;
$email_message=new email_message_class;
$email_message->SetEncodedEmailHeader("To",$to_address,$to_name);
$email_message->SetEncodedEmailHeader("From",$from_address,$from_name);
$email_message->SetEncodedEmailHeader("Reply-To",$reply_address,$reply_name);
$email_message->SetHeader("Sender",$from_address);
$email_message->SetEncodedHeader("Subject",$subject,"UTF-8");
在localhost中它工作正常,但在Web服务器中它工作不正常。在Web服务器中,默认情况下,编码也设置为utf-8。
我做错了什么?提前谢谢。
您的代码是正确的,绝对没有错误,但其他东西都无法编码。因为我需要消息源头和消息来告诉你到底发生了什么?我没有进一步的信息,你发送的电子邮件是纯文本还是HTML。但通常有两个问题:
缺少Mime版本
错误显示字符的原因是开发人员忘记将消息描述为MIME版本。如果邮件缺少Internet邮件标准所要求的"Mime Version"标头,Webmail将完全忽略"charset"标头,从而使邮件混乱,除非它已经在UTF-8字符集中。
显示具有特殊字符的主题
如果你想用utf-8编码显示主题,那么你必须将主题编码为:
//Setting the Language as Japan
mb_language("ja");
//Converting the string into Japan Encoding
$subject = mb_convert_encoding($subject, "ISO-2022-JP","AUTO");
//Now convert the string to MIME Header type
$subject = mb_encode_mimeheader($subject);
如果上面提到的事情不能解决问题,那么请您发布电子邮件的RAW标题,因为这将有助于更好地解决问题。
是否测试使用.htaccess更改字符集?
AddDefaultCharset UTF-8
由于您在注释中指出您使用的是Joomla 1.5,因此该版本中的phpmailer()
库似乎存在问题,它强制邮件的字符集(消息上)使用iso-8559-1
的字符集设置发送邮件。要解决此问题,请在此处打开核心phpmailer()
库:
[Joomla安装路径]/librarys/phpmailer/phpmailer.php
在第50行周围有一个称为$CharSet
的设置。如果尚未设置为utf-8
,请将其更改为:
/**
* Sets the CharSet of the message.
* @var string
*/
var $CharSet = 'utf-8';
您可能还想在Joomla 1.5代码库中搜索iso-8559-1
,看看组件或库是否在代码链中的某个位置强制进行iso-8559-1
编码。
我建议检查的另一个设置是第63行周围的$Encoding
。默认设置似乎是8bit
,但我过去不得不将其调整为quoted-printable
或base64
,以解决我正在处理的特定设置上的一些邮件问题
/**
* Sets the Encoding of the message. Options for this are "8bit",
* "7bit", "binary", "base64", and "quoted-printable".
* @var string
*/
var $Encoding = '8bit';
我建议你使用joomla mailer类,可能看起来像这样:
$mailer = JFactory::getMailer();
$mailer->setSender(array($from_address,$from_name));
$mailer->addRecipient($to_address, $to_name);
$mailer->setSubject($subject);
$mailer->setBody("BODY MESSAGE STRING");
$mailer->Send();
默认情况下,它是utf8,如果你使用Joomla,我看不出有任何理由不使用它。