leni_m
@leni_m
ЧупаКобрус

Как решить проблему с кодировкой письма?

вобщем на outlook и яндекс почту приходит нормально, а на маил ру приходят вопросительные знаки
function sendMailAttachment($mailTo, $subject, $message, $file = false){
        $separator = "---"; // разделитель в письме
        $subject = '=?utf-8?B?'.base64_encode($subject).'?=';
        // Заголовки для письма
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: multipart/mixed; boundary=\"$separator\""; // в заголовке указываем разделитель
        // если письмо с вложением
        if($file){
            $bodyMail = "--$separator\n"; // начало тела письма, выводим разделитель
            $bodyMail .= "Content-type: text/html; charset=\"utf - 8\"\r\n"; // кодировка письма
            $bodyMail .= "Content-Transfer-Encoding: 8bit"; // задаем конвертацию письма
            $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n"; // задаем название файла
            $bodyMail .= $message."\n"; // добавляем текст письма
            $bodyMail .= "--$separator\n";
            $fileRead = fopen($file, "r"); // открываем файл
            $contentFile = fread($fileRead, filesize($file)); // считываем его до конца
            fclose($fileRead); // закрываем файл
            $bodyMail .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($file))."?=\n";
            $bodyMail .= "Content-Transfer-Encoding: base64\n"; // кодировка файла
            $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n";
            $bodyMail .= chunk_split(base64_encode($contentFile))."\n"; // кодируем и прикрепляем файл
            $bodyMail .= "--".$separator ."--\n";
            // письмо без вложения
        }else{
            $bodyMail = $message;
        }
        $result = mail($mailTo, $subject, $bodyMail, $headers); // отправка письма
        return $result;
    }
  • Вопрос задан
  • 2117 просмотров
Решения вопроса 2
Не помню на каком сайте находил, но если вставить текст вот так, то проблемы с кодировкой решаются.
$text = '=?utf-8?b?' . $text . '?=';
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В Content-Type кодировка utf-8 пишется без пробелов.
Все переносы строк должны быть /r/n.
В части, содержащей само сообщение, заголовок Content-Disposition не нужен, он только для приложенных файлов
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽