L
L
leni_m2017-10-23 15:09:24
PHP
leni_m, 2017-10-23 15:09:24

How to solve the problem with the encoding of the letter?

in general, outlook and Yandex mail comes normally, but question marks come to mail ru

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;
    }

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Abdula Magomedov, 2017-10-23
@leni_m

I don’t remember on which site I found it, but if you paste the text like this, then encoding problems are solved.
$text = '=?utf-8?b?' . $text . '?=';

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question