Joomla UTF-8编码在打开邮件时失败


Joomla UTF-8 encoding fails on opening the mail

我在编码方面遇到了一个奇怪的问题,描述如下:

现在,在电子邮件主题中,"显示为"。。电子邮件通过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-printablebase64,以解决我正在处理的特定设置上的一些邮件问题

  /**
   * 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,我看不出有任何理由不使用它。