PHPMailer字符编码问题

时间:2010-03-22 10:40:40

标签: 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;  
}

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

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

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

13 个答案:

答案 0 :(得分:402)

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

另请注意

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

应替换为:

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

放在类的实例化之后(new之后)。属性区分大小写!请参阅列表中的PHPMailer doc和&准确的拼写。

此外,PHPMailer的默认编码为8bit,这可能会导致UTF-8数据出现问题。要解决此问题,您可以执行以下操作:

$mail->Encoding = 'base64';

请注意'quoted-printable'在这些情况下可能也会起作用(甚至可能'binary')。有关详细信息,请参阅RFC1341 - Content-Transfer-Encoding Header Field

答案 1 :(得分:24)

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

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

试试这个

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

答案 2 :(得分:5)

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

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

应替换为:

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

答案 3 :(得分:4)

我以这种方式工作

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

我在$ mail-> Subject / 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);

希望有帮助。

答案 6 :(得分:0)

如果您的邮件使用Latin1,则可以使用utf8_encode 无论如何,对我有用。

答案 7 :(得分:0)

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

---这一行应该在

之下

$mail = new PHPMailer(); line.

PFF ..

是的,这是正确的。您必须在对象实例化之后放置它。

答案 8 :(得分:0)

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

$mail->CharSet = "UTF-8"

答案 9 :(得分:0)

为了避免使用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();

答案 10 :(得分:0)

在上述方法均无效的情况下,仍然显示ª הודפסה ×•× ×©×œ的邮件:

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

答案 11 :(得分:-1)

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

答案 12 :(得分:-5)

$ mail - > charSet =“UTF-8”; ---这行应该在$ mail = new PHPMailer()下;线。

PFF ..