Проблемы с кодировкой символов 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 ответов:
если вы на 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";
извините, за опоздание на партию. В зависимости от конфигурации сервера, вам может потребоваться указать символ строго с строчные буквы utf-8, в противном случае он будет проигнорирован. Попробуйте это, если вы в конечном итоге здесь ищете решения и ни один из ответов выше не помогает:
$mail->CharSet = "UTF-8";
заменить:
$mail->CharSet = "utf-8";
Если ваше сообщение использует Latin1, вы можете использовать utf8_encode В любом случае, это работает на меня.
@ $mail -> charSet = "UTF-8";
---эта линия должна быть под
$mail = new PHPMailer(); line.
пфф..
Да, это правильно. Вы должны разместить его после создания экземпляра объекта.
чтобы избежать проблем с кодировкой символов при отправке писем с помощью класса 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();