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;
    }
  • Вопрос задан
  • 2267 просмотров
Решения вопроса 2
Не помню на каком сайте находил, но если вставить текст вот так, то проблемы с кодировкой решаются.
$text = '=?utf-8?b?' . $text . '?=';
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В Content-Type кодировка utf-8 пишется без пробелов.
Все переносы строк должны быть /r/n.
В части, содержащей само сообщение, заголовок Content-Disposition не нужен, он только для приложенных файлов
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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