@EVOSandru6

Где в Yii классе PHPMailer выставлять заголовки?

Добрый день,

В каком месте в данном классе выставляется кодировка?

Есть такой фрагмент:

$from = 'evosduple@tastycoffee.kz';
                $body =
                    "\n\n\t Фирма: ".$model->firm . '<br>'
                    ."\n\n\t Город: ".$model->city . '<br>'
                    ."\n\n\t Телефон: ".$model->phone .'<br>'
                    ."\n\n\t Контактное лицо: ".$model->name .'<br>'
                    ."\n\n\t Email: ".$model->email;
                $body = "=?utf-8?B?".base64_encode($body)."?=";
                $subject = "=?utf-8?B?".base64_encode('Запрос прайс-листа oт '.$model->name)."?="; // Кодируем тему (во избежание проблем с кодировкой)

// тут в цикле отправляю email на необходимые адреса
foreach(Yii::app()->params['email'] as $key => $email){
       //mail($email, $subject, $body, $headers);
       My::mailsend($email, $from ,$subject,$body);
				}


Метод My::mailsend():

static function mailsend($to,$from,$subject,$message){
        $mail=Yii::app()->Smtpmail;
        $mail->SetFrom($from, 'FirmaName');
        $mail->Subject = $subject;
        $mail->MsgHTML($message);
        $mail->AddAddress($to, "");
        if(!$mail->Send()) 
            echo "Mailer Error: " . $mail->ErrorInfo;
    }


После отправки данных из формы на почту приходит письмо с правильной кодировкой для Subject , а вот body (текст письма):

ФиÑма: test
ÐоÑод: test
ТелеÑон: test
ÐонÑакÑное лиÑо: test
Email: test@test.kz


Т.е. некорректно отображаются славянские буквы. Как это можно исправить?

Раньше использовал простую функцию mail(), но на хостинге новые стандарты, нужно проходить smtp авторизацию.
В первом случае, заголовки с кодировкой и остальным передавались в функцию mail(). Пробовал закодировать $body, как это сделано с $subject. В данном случае прилетает такой текст:

=?utf-8?B?CgoJINCk0LjRgNC80LA6IHRlc3Q8YnI+CgoJINCT0L7RgNC+0LQ6IHRlc3Q8YnI+CgoJINCi0LXQu9C10YTQvtC9OiB0ZXN0PGJyPgoKCSDQmtC+0L3RgtCw0LrRgtC90L7QtSDQu9C40YbQvjogdGVzdDxicj4KCgkgRW1haWw6IHRlc3RAdGVzdC5reg==?=
  • Вопрос задан
  • 850 просмотров
Решения вопроса 1
@edojdikov
Senior PHP developer
Если это у вас именно PHPMAiler, то самому base64-кодировать body и subject не надо.
https://github.com/PHPMailer/PHPMailer
$mail->CharSet = 'UTF-8'; // Кодировка текста
$mail->Encoding = 'base64'; // в каком виде передавать сообщение, оно само закодирует base64 по правилам.
$mail->addCustomHeader($header . ':' . $value); // Добавление своего заголовка

Все эти махинации делайте в static function mailsend
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы