PHPMailer字符编码问题

171 php phpmailer

我尝试使用PHPMailer发送注册,激活.邮件给用户:

require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();  
$mail->Host     = "smtp.mydomain.org";  
$mail->From     = "name@mydomain.org";
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header;
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");
$mail->AddAddress($emladd);
$mail->AddAddress("mytest@gmail.com");
$mail->AddBCC('mytest2@mydomain.org', 'firstadd');
$mail->Subject  = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;  
if(!$mail->Send()) {  
   echo 'Message was not sent.';  
   echo 'Mailer error: ' . $mail->ErrorInfo;  
}
Run Code Online (Sandbox Code Playgroud)

$messageIS包含拉丁字符.不幸的是,所有webmail(gmail,webmail.mydomain.org,emailaddress.domain.xx)都使用不同的编码.

如何强制使用UTF-8编码在所有邮箱上显示我的邮件完全相同?

我尝试转换邮件标题宽度mb_convert_encoding(),但没有运气.

Ale*_*exV 429

如果您100%确定$ message包含ISO-8859-1,您可以使用utf8_encode,正如David所说.否则在$ message上使用 mb_detect_encodingmb_convert_encoding.

另请注意

$mail -> charSet = "UTF-8"; 
Run Code Online (Sandbox Code Playgroud)

应该替换为:

$mail->CharSet = 'UTF-8';
Run Code Online (Sandbox Code Playgroud)

并且实例化之后放置(之后new).属性区分大小写!请参阅PHPMailer doc fot列表和确切的拼写.

此外,PHPMailer的默认编码对于8bitUTF-8数据可能存在问题.要解决此问题,您可以:

$mail->Encoding = 'base64';
Run Code Online (Sandbox Code Playgroud)

请注意,'quoted-printable'在这些情况下(甚至可能'binary')也可能会有效.有关更多详细信息,请阅读RFC1341 - Content-Transfer-Encoding标头字段.

  • 好吧,我不知道是否有人关心,因为这是疯狂的旧,但我不得不添加$ mail-> Encoding ="base64"让这对我有用 (32认同)
  • @AndrewRevak你救了一天!:) (4认同)
  • @AndrewRevak很棒的东西!这就解决了它. (2认同)

小智 25

$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();
Run Code Online (Sandbox Code Playgroud)

线$mail -> CharSet = "UTF-8";必须在$mail = new PHPMailer();没有空格后!

试试这个

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
Run Code Online (Sandbox Code Playgroud)

  • 为了更好的阅读,我更新了这篇文章,但是op的问题已经在2年前得到解答了!接受的答案已经包含了这个. (5认同)

Oha*_*hen 6

当以上方法均不起作用时,邮件仍然如下所示\xc2\xaa \xc3\x97\xe2\x80\x9d\xc3\x97\xe2\x80\xa2\xc3\x97\xe2\x80\x9c\xc3\x97\xc2\xa4\xc3\x97\xc2\xa1\xc3\x97\xe2\x80\x9d \xc3\x97\xe2\x80\xa2\xc3\x97 \xc3\x97\xc2\xa9\xc3\x97\xc5\x93

\n\n
$mail->addCustomHeader('Content-Type', 'text/plain;charset=utf-8');\n$mail->Subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';;\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

我这样工作

  $mail->FromName = utf8_decode($_POST['name']);
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/zh/function.utf8-decode.php


小智 5

抱歉迟到了.根据您的服务器配置,您可能需要严格使用小写字母 utf-8 指定字符,否则将被忽略.试试这个,如果你最终在这里搜索解决方案,上面的答案都没有帮助:

$mail->CharSet = "UTF-8";
Run Code Online (Sandbox Code Playgroud)

应替换为:

$mail->CharSet = "utf-8";
Run Code Online (Sandbox Code Playgroud)