PHPmailer日文字符

时间:2015-04-11 02:00:32

标签: php phpmailer

我正在尝试使用PHPmailer发送带日语字符的电子邮件, 这是我的功能:

function sendMail()
{
  mb_language('ja');
  mb_internal_encoding('UTF-8');

  $mail = new PHPMailer();

  $mail->isSMTP();
  $mail->SMTPAuth      = true;
  $mail->Host          = EMAIL_HOST; 
  $mail->Port          = EMAIL_PORT;
  $mail->Username      = EMAIL_USERNAME;
  $mail->Password      = EMAIL_PASSWORD;
  $mail->SMTPKeepAlive = true;
  $mail->Mailer        = 'smtp';
  $mail->CharSet       = 'ISO-2022-JP';
  $mail->Encoding      = "7bit"; 
  $mail->SMTPDebug     = 0;
  $mail->From          = EMAIL_SET_FROM_EMAIL;
  $mail->FromName      = mb_encode_mimeheader(EMAIL_SET_FROM_NAME, "ISO-2022-JP-MS");
  $mail->addAddress($this->to);

  if (!empty($this->replyTo)) {
    $mail->addReplyTo($this->replyTo);
  }

  $mail->isHTML(true);
  $mail->Subject = mb_encode_mimeheader($this->subject, "ISO-2022-JP-MS");
  $mail->Body    = mb_convert_encoding($this->body, "ISO-2022-JP-MS", "UTF-8");

  $isSend = $mail->send();

  if (!$isSend) {
    throw new exception(__METHOD__ . '() ' . $mail->ErrorInfo);
  }
}

在收件人中,有日语字符的邮件正文有时会像这样破坏:

案例1:エ%j%“:A

案例2:我的朋友日本笔记本电脑显示几个带有问号的黑色钻石字符。它在Gmail上,

案例3:某个日文字符出现问号。

任何正文都可以向我显示PHP邮件程序的正确设置,以便它可以发送收件人中显示的未知字符的日文字符邮件吗?

2 个答案:

答案 0 :(得分:0)

查看浏览器时带有问号的黑色钻石意味着该角色没有glyph。该字符可能有效但无法显示。

换句话说,它可能是系统进行显示而不是程序的限制。

但是你应该检查你的程序。在十六进制编辑器中打开电子邮件,验证代码是否符合您的预期,并与您指定的编码相匹配。

答案 1 :(得分:0)

您自己编码,然后PHPMailer将再次执行此操作。设置主题和正文时,只需在正确的字符集中使用原始文本,不要自己编码。您还使用不适合7位的字符集设置7位编码。如果您的文字已经是UTF-8,为什么不坚持使用? UTF-8处理通常比8位字符集更可靠。