PHPMailer 和主题中的特定字符(UTF-8?)

PHPMailer and specific characters in subject (UTF-8?)

我正在尝试使用 PHPMailer 发送电子邮件。除了主题中的 UTF-8 编码外,一切正常。 我的邮件客户端中仍然收到 html 代码(commancé,必须是“commancé”)。

$mail = new PHPMailer(true);
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';

try {
    //Server settings

    //Recipients
    $mail->setFrom('kevin@expl.com', 'Kevin de Exple');
    $mail->addAddress($email, $name);     // Add a recipient
    
    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $subject = 'RE: La plantation de votre arbre a commancé';
    $sub = '=?UTF-8?B?'.base64_encode($subject).'?=';
    $mail->Subject = $sub;

...

你能帮帮我吗?我尝试了网上的一切:)

祝你有个愉快的一天!

这样做

    function correct_encoding($text) {
      $current_encoding = mb_detect_encoding($text, 'auto');
      $text = iconv($current_encoding, 'UTF-8', $text);
      return $text;
    }
    $mail = new PHPMailer(true);
    $mail->CharSet = 'utf-8';///<-- use lowercase
    //$mail->Encoding = 'base64';//usually it is not necessary

try {
    //Server settings

    //Recipients
    $mail->setFrom('kevin@expl.com', 'Kevin de Exple');
    $mail->addAddress($email, $name);     // Add a recipient
    
    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $subject = 'RE: La plantation de votre arbre a commanc&eacute;';
    //$sub = '=?UTF-8?B?'.base64_encode($subject).'?=';
    $mail->Subject = correct_encoding($subject);

我不明白你为什么要用艰难的方式做事!第一步是将 CharSet 属性 设置为 UTF-8,您已经完成了。对于这个主题,你有这个:

$subject = 'RE: La plantation de votre arbre a commanc&eacute;';
$sub = '=?UTF-8?B?'.base64_encode($subject).'?=';
$mail->Subject = $sub;

里面有很多不必要的东西。您需要做的就是:

$mail->Subject = 'RE: La plantation de votre arbre a commancé';

PHPMailer 会为您处理所有编码。此处唯一要注意的是确保您在编辑器中实际使用的是 UTF-8。如果您使用的是 ISO-8859-1 或类似标准,它将无法工作——尽管它在您的代码中看起来是一样的。

至于拼写错误,我将不得不把它们留给你...