PHPMailer 字符编码问题

2022-08-30 06:14:43

我尝试使用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;  
}

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

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

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


答案 1

如果您100%确定$message包含ISO-8859-1,则可以像David所说的那样使用utf8_encode。否则,请在$message上使用mb_detect_encoding和mb_convert_encoding。

另请注意

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

应替换为:

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

放置在类的实例化之后(在之后)。属性区分大小写!请参阅PHPMailer文档,了解列表和确切拼写。new

此外,PHPMailer的默认编码对于UTF-8数据可能会有问题。要解决此问题,您可以执行以下操作:8bit

$mail->Encoding = 'base64';

请注意,在这些情况下可能也有效(甚至可能)。有关更多详细信息,您可以阅读 RFC1341 - 内容传输编码标头字段'quoted-printable''binary'


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

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

试试这个

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

推荐