PHPmailer 日文字符

Posted

技术标签:

【中文标题】PHPmailer 日文字符【英文标题】:PHPmailer Japanese Character 【发布时间】:2015-06-16 20:49:18 【问题描述】:

我正在尝试使用 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 邮件程序的正确设置,以便它可以发送日文字符的邮件,而不会在收件人中显示未知字符吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

查看浏览器上带有问号的黑色菱形表示该字符没有glyph。该字符可能有效但无法显示。

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

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

【讨论】:

试试这个:***.com/questions/5498197/… 其中一个答案甚至描述了如何在 VIM 中做到这一点。

以上是关于PHPmailer 日文字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHPMailer 主题字段中插入图标​​或图像

警告:require_once(Composer/PHPMailer/vendor/phpmailer/phpmailer/src/autoload.php):无法打开流:没有这样的文件或目录

2019 无法调用未创建 PHPMailer 版本 6.0.7 实例的新 PHPMailer

phpmailer无法发送电子邮件

PHPMailer:替换默认的messageID

PHP 通过PHPMailer发送邮件