Проблемы кодировки символов в PHPMailer - PullRequest
160 голосов
/ 22 марта 2010

Я пытаюсь использовать 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 содержит символы латинского алфавита.К сожалению, вся веб-почта (gmail, webmail.mydomain.org, emailaddress.domain.xx) использует различную кодировку.

Как я могу заставить использовать кодировку UTF-8, чтобы моя почта отображалась одинаково на всех почтовых ящиках?

Я пытаюсь преобразовать ширину заголовка письма mb_convert_encoding(), но безуспешно.

Ответы [ 12 ]

404 голосов
/ 22 марта 2010

Если вы на 100% уверены, что сообщение $ содержит ISO-8859-1, вы можете использовать utf8_encode , как говорит Дэвид. В противном случае используйте mb_detect_encoding и mb_convert_encoding в сообщении $.

Также обратите внимание, что

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

Следует заменить на:

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

И помещены после создания класса (после new). Свойства чувствительны к регистру! См. PHPMailer doc для списка и точного написания.

Также кодировка PHPMailer по умолчанию - 8bit, что может быть проблематично с данными UTF-8. Чтобы это исправить, вы можете сделать:

$mail->Encoding = 'base64';

Обратите внимание, что 'quoted-printable', вероятно, тоже будет работать в этих случаях (и, возможно, даже 'binary'). Для получения более подробной информации вы можете прочитать RFC1341 - Поле заголовка кодировки передачи содержимого .

24 голосов
/ 06 мая 2013
$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();

строка $mail -> CharSet = "UTF-8"; должна быть после $mail = new PHPMailer(); и без пробелов!

попробуйте это

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
5 голосов
/ 09 февраля 2016

Извините за опоздание на вечеринку. В зависимости от конфигурации вашего сервера, вам может потребоваться указать символ строго с строчными буквами utf-8, в противном случае он будет проигнорирован. Попробуйте это, если вы в конечном итоге ищете решения, и ни один из приведенных выше ответов не поможет:

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

следует заменить на:

$mail->CharSet = "utf-8";
4 голосов
/ 30 апреля 2013

Я сам так работаю

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

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

2 голосов
/ 28 мая 2016
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Encoding = "16bit";
1 голос
/ 27 ноября 2018

Я получаю & oacute; в $ 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);

Надеюсь, это поможет.

0 голосов
/ 13 марта 2017

Чтобы избежать проблем с кодировкой символов при отправке электронных писем с использованием класса PHPMailer, мы можем настроить его так, чтобы отправлять его с кодировкой символов UTF-8 с помощью параметра «CharSet», как мы видим в следующем коде 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();
0 голосов
/ 04 декабря 2015

Самый простой способ, который поможет вам - это установить CharSet в UTF-8

$mail->CharSet = "UTF-8"
0 голосов
/ 13 октября 2015
$mail = new PHPMailer();
$mail -> CharSet = "UTF-8";
0 голосов
/ 09 июня 2015

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

--- эта строка должна быть под

$mail = new PHPMailer(); line.

пфф ..


Да, это правильно. Вы должны поместить его после создания объекта.

...