Проблемы с кодировкой символов 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;  
}

The $message содержит латинские символы. К сожалению, все веб-почты (gmail, webmail.mydomain.org, адрес электронной почты.домен.ХХ) используют различные кодировки.

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

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

11 132

11 ответов:

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

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

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

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

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

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

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

$mail->Encoding = 'base64';

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

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

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

попробуй такое

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

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

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

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

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

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

заменить:

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

Если ваше сообщение использует Latin1, вы можете использовать utf8_encode В любом случае, это работает на меня.

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

---эта линия должна быть под

$mail = new PHPMailer(); line.

пфф..


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

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

$mail->CharSet = "UTF-8"

чтобы избежать проблем с кодировкой символов при отправке писем с помощью класса 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();
$mail = new PHPMailer();
$mail -> CharSet = "UTF-8";

$mail -> charSet = "UTF-8";- - - эта строка должна быть под $mail = new PHPMailer (); line.

пфф..