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;
}

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

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

我试图转换邮件头宽度mb_convert_encoding(),但没有运气。

324587 次浏览

如果你100%确定$message包含ISO-8859-1,你可以像David说的那样使用utf8_encode。否则,在$message上使用mb_detect_encodingmb_convert_encoding

还要注意

$mail -> charSet = "UTF-8";

应由:

$mail->CharSet = 'UTF-8';

放在类的实例化(在new之后)。属性区分大小写!查看列表的PHPMailer医生 &准确的拼写。

此外,PHPMailer的默认编码是8bit,这可能会对UTF-8数据产生问题。要解决这个问题,你可以这样做:

$mail->Encoding = 'base64';

请注意,'quoted-printable'可能在这些情况下也可以工作(甚至可能是'binary')。欲了解更多细节,请阅读内容传输编码报头字段

我自己就是这样工作的

  $mail->FromName = utf8_decode($_POST['name']);

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

$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();

$mail -> CharSet = "UTF-8";必须在$mail = new PHPMailer();之后

试试这个

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";

最简单的方法是将CharSet设置为UTF-8

$mail->CharSet = "UTF-8"

抱歉我来晚了。根据您的服务器配置,您可能需要严格指定字符小写字母 utf-8,否则它将被忽略。如果你在这里寻找解决方案,上面的答案都没有帮助,试试这个:

$mail->CharSet = "UTF-8";

应替换为:

$mail->CharSet = "utf-8";
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Encoding = "16bit";

为了避免使用PHPMailer类发送邮件时的字符编码问题,我们可以使用“CharSet”参数将其配置为使用UTF-8字符编码发送邮件,如下面的Php代码所示:

$mail = new PHPMailer();
$mail->From = 'midireccion@email.com';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('emaildestino@email.com');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);




// Active condition utf-8
$mail->CharSet = 'UTF-8';




// Send mail
$mail->Send();

我得到, oacute;在$mail->主题/w PHPMailer。

所以对我来说,完整的解决方案是:

// Your Subject with tildes. Example.
$someSubjectWithTildes = 'Subscripción España';


$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'quoted-printable';
$mailer->Subject = html_entity_decode($someSubjectWithTildes);

希望能有所帮助。

当以上都无效时,邮件仍然看起来像ª הודפסה ×•× ×©×œ:

$mail->addCustomHeader('Content-Type', 'text/plain;charset=utf-8');
$mail->Subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';;