Php content transfer encoding quoted printable

Не получается отправить письмо с русскими буквами

Добрый день, есть php файл с функцией отправки письма. Кодировка UTF-8.
Не получается отправить русский текст в сообщении.
Вместо сообщения выходят крякозябры.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
 $name=$_FILES['logotype']['name']; $tmp_name = $_FILES['logotype']['tmp_name']; $file1_size = $_FILES['logotype']['size']; $file1_type = $_FILES['logotype']['type']; $location='./sendedmails/'; $dlina_name=strlen($name); $format_name=substr($file1_type, 6); #-------------------------------------------------- $date_today = date("dmy"); $today[1] = date("His"); $items22 = (string)($date_today); $items23 = strval($today[1]); $plus2=$items22.$items23; $news_icon = $plus2.".".$format_name; if (move_uploaded_file($tmp_name, $location.$news_icon)){ $step_to_send="1"; }else{ $step_to_send="0"; echo " Ошибка!
Не удалось добавить данные.

Проверьте правильность ввода данных и фотографии На главную
"; } ########################################################################################## $file = $location.$news_icon; // файл $mailTo = "komu@mail.ru"; // кому $from = "otkogo@mail.ru"; // от кого $subject = "New request in web site olamcom.ru"; // тема письма $message = "Новое обращение от посетителя"; // текст письма #$message = iconv('utf-8','windows-1251', $message); //попытка изменения кодировки $r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением echo ($r)?'Письмо отправлено':'Ошибка. Письмо не отправлено!'; //$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка письма без вложения //echo ($r)?'Письмо отправлено':'Ошибка. Письмо не отправлено!'; /** * Отправка письма с вложением * @param string $mailTo * @param string $from * @param string $subject * @param string $message * @param string|bool $file - не обязательный параметр, путь до файла * * @return bool - результат отправки */ function sendMailAttachment($mailTo, $from, $subject, $message, $file = false){ $separator = "---"; // разделитель в письме // Заголовки для письма $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: $from\nReply-To: $from\n"; // задаем от кого письмо $headers .= "Content-Type: multipart/mixed; boundary=\"$separator\""; // в заголовке указываем разделитель // если письмо с вложением if($file){ $bodyMail = "--$separator\n"; // начало тела письма, выводим разделитель $bodyMail .= "Content-type: text/html; charset='utf-8'\n"; // кодировка письма $bodyMail .= "Content-Transfer-Encoding: quoted-printable"; // задаем конвертацию письма $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; } ?>

Отправить письмо с русскими буквами
Приветствую, помогите пожалуйста разобраться с кодировками. Задача в том чтобы можно было через.

Не получается написать индекс с русскими буквами
Здравствуйте. Пытаюсь написать индекс с русскими буквами и не получается. L1ГР Выделяет ГР красным.

Не получается отправить письмо
Здравствуйте, форумчане. Столкнулся с проблемой: не получается отправить письмо на емайл. На.

Не получается отправить письмо
idSmtp1.Host := ‘SMTP.yandex.ru’; idSmtp1.Port := 25; idSmtp1.Username := ‘po4ta0019’; .

$headers = "Content-type: text/plain; charset=utf-8\r\n";
1 2 3 4 5 6 7 8 9 10 11 12 13
function mail_utf8($to, $from, $subject, $message) { $subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\r\n"; $headers .= "From: $from\r\n"; return mail($to, $subject, $message, $headers); } // пример использования mail_utf8('to-user@gmail.com', 'no-reply@example.ru', 'Заголовок сообщения', 'Текст сообщения');

Источник

Как отослать корректное хтмл-письмо через php на gmail?

Но проблема в том что в ящик приходит неформатированное сообщение в виде текста без стилей и прочего (хотя в теле сообщения, если посмотреть, все на месте). Как сделать так чтобы гугл распознавал сообщение как html?

Не изобретайте велосипед. Пользуйтесь готовыми решениями, например — phpmailer. Тогда процедура отправки будет выглядеть следующим образом:

setFrom('your@email.ru'); // Email отправителя // Можно отправить письмо нескольким адресатам за один раз $recipients = ['first@email.ru', 'second@email.ru', 'third@email.ru']; foreach ($recipients as $recipient) < $mail->addAddress($recipient); //$mail->AddBCC($recipient); // Или можно отправить скрытую копию, чтобы получатели не видели друг друга > $mail->Subject = 'Заголовок письма'; $mail->Body = 'Здесь текст письма в формате html.'; $mail->isHTML(true); // Формат HTML $mail->send();

Хотелось бы понять в чем проблема. Потому что шлем письма из нашего собственного веб-приложения. Интересно что в спаме гугла отображается текст, а когда письмо приходит в инбокс, то все нормально.

klevunin

Попробуйте вот так
quoted_printable_encode(«тело письма hrml»)
и header

Content-Transfer-Encoding: quoted-printable Content-type: text/html; charset=utf-8 MIME-Version: 1.0

DKIM-подпись — обязательно нужно делать если не сделано. Иначе 100% в спам будет всегда падать.

mail($email, "=?utf-8?b?" . base64_encode("Тема письма") . "?=", quoted_printable_encode("тело письма с html"), $header);

Источник

Советы по PHP : Отправка писем при помощи PHP : Прикрепление файла

Письмо, содержащее прикрепленный файл, несколько отличается от простого. В нем добавляются некоторые заголовки, и немного меняется само построение, хотя несомненно само письмо остается текстовым файлом. Но давайте все по порядку.

Одна из особенностей — наличие заголовка Mime-Version.

Этот заголовок указывает стандарт, которому соответствует тело сообщения.

Сообщения, соответствующие MIME обязаны содержать такое поле заголовка со следующим текстом:

Если мы хотим отослать письмо с прикрепленными файлами, то необходимо использовать заголовок

Content-type: multipart/mixed

который обозначает, что письмо состоит из нескольких частей, каждая из которых содержит свой заголовок Content-type.

Для обозначения границы этих частей необходимо использовать параметр boundary, который еще называется маркером границы.

Значением этого параметра может служить любая строка. Но надо учесть, что она должна быть уникальной и не встречалась в теле письма. Иначе письмо может быть неправильно разбито на части.

From: "Uspenskii Evgeny" [email protected]> To: [email protected] Subject: Hello Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="spravkaweb-12345"

При разделении письма на части перед маркером должны стоять два знака дефиса.

А последний маркер, который обозначает конец письма, должен содержать в конце два знака дефиса.

Для каждой части необходимо установить свои заголовки.

После заголовков необходимо поставить два знака перевода строки.

From: "Uspenskii Evgeny" [email protected]> To: [email protected] Subject: Hello Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="spravkaweb-12345" --spravkaweb-1234 Content-type: text/plain; charset="windows-1251" Content-Transfer-Encoding: quoted-printable Hi! Here's that my file! --spravkaweb-1234 Content-Type: application/x-rar-compressed; name="file.rar" Content-Transfer-Encoding:base64 Content-Disposition:attachment UmFyIRoHAM+QcwAADQAAAAAAAABvYXQg . spravkaweb-1234--

Если у нас идет часть с текстом, то надо заголовок Content-Transfer-Encoding присвоить значение quoted-printable, либо 7bit, либо 8bit.

Для части с файлом этот заголовок должен быть равен base64.

Заголовок Content-Disposition, присутствующий во второй части, указывает, как почтовой программе следует отобразить данную часть письма. Он может принимать значение attachment (этот участок не является частью письма, а просто прикреплен к нему в виде файла) и inline (включение, которое используется непосредственно в письме, например, картинка, вставляемая в HTML).

В первой части заголовком

Content-type: text/plain; charset="windows-1251"

указали, что это простой текст с кодировкой Windows.

Во второй же части заголовком

Content-Type: application/x-rar-compressed; name="file.rar"

указали, что тип файла — rar-архив, а имя файла — file.rar.

Если отправляем gif-картинку, его Content-type будет выглядеть:

Content-Type: image/gif; name="file.gif"

В случае, если заранее не известно, какой тип файла отправляем, или формат файла не является стандартным, следует заголовку Content-type присвоить значение application/octet-stream.

Content-Type: application/octet-stream; name="file.dat"

Прикрепленные файлы должны быть размещены в письме в формате base64. Преобразовать файл в этот формат можно при помощи PHP-функции base64_encode():

// Открываем файл для чтения в бинарном формате $file=fopen("file.zip", "rb"); // Считываем его в строку $str_file $str_file=fread($file,filesize("file.zip")); // Преобразуем эту строку в base64-формат $str_file=base64_encode($str_file);

Теперь переменную $str_file, которая содержит файл, можно вставлять в письмо.

Для окончательного закрепления материала напишем функцию, которая отправляет письмо в HTML-формате по указанному адресату с прикрепленным файлом:

/* $to - адрес получателя письма $from_mail - адрес отправителя письма $from_name - имя отправителя письма $subject - тема письма $message - само сообщение в HTML-формате $file_name - путь к файлу, который надо прикрепить к письму (это может быть имя файла, выбранного в поле ) */ function sendMail($to,$from_mail,$from_name,$subject,$message,$file_name) < $bound="spravkaweb-1234"; $header="From: '$from_name' n"; $header.="To: $ton"; $header.="Subject: $subjectn"; $header.="Mime-Version: 1.0n"; $header.="Content-Type: multipart/mixed; boundary='$bound'"; $body="nn--$boundn"; $body.="Content-type: text/html; charset='windows-1251'\n"; $body.="Content-Transfer-Encoding: quoted-printablenn"; $body.="$message"; $file=fopen($file_name,"rb"); $body.="nn--$boundn"; $body.="Content-Type: application/octet-stream;"; $body.="name=".basename($file_name)."\n"; $body.="Content-Transfer-Encoding:base64n"; $body.="Content-Disposition:attachmentnn"; $body.=base64_encode(fread($file,filesize($file_name)))."n"; $body.="$bound--nn"; if(mail($to, $subject, $body, $header)) < echo "
Письмо было успешно отправлено!
";

> else 

Источник

Читайте также:  Массовое изменение html файлов
Оцените статью