‘ . $form_subject . ‘

phpBB Guru — Официальная русская поддержка форума phpBB3

Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекратила выпуск обновлений для phpBB версии 3.2.
С учетом этого, рекомендуется обновить конференции до версии 3.3.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до отдельного объявления.

HTML и текстовая версия письма

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ).

static77 phpBB 2.0.0 Сообщения: 226 Стаж: 7 лет 5 месяцев Благодарил (а): 107 раз Поблагодарили: 5 раз

HTML и текстовая версия письма

Сообщение static77 » 04.06.2020 19:25

rxu phpBB Guru
Сообщения: 16080 Стаж: 17 лет 2 месяца Откуда: Красноярск Благодарил (а): 508 раз Поблагодарили: 2013 раз Контактная информация:

Re: HTML и текстовая версия письма

Сообщение rxu » 04.06.2020 19:35

static77 phpBB 2.0.0 Сообщения: 226 Стаж: 7 лет 5 месяцев Благодарил (а): 107 раз Поблагодарили: 5 раз

Читайте также:  Цепочка золотая бисмарк питон

Re: HTML и текстовая версия письма

Сообщение static77 » 04.06.2020 19:42

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

SpamAssassin считает, что Вы можете улучшить рейтинг ваших писем
Message only has text/html MIME parts
Вам нужно добавить текстовую версию письма (text/plain)

Источник

Правильная настройка почты, чтобы не попасть по спам фильтры

mail headers

Письма, отправленные с неверным заголовком Return-Path не попадают даже в спам. Лечение:

mail("email@site.ru", "subj", "message text", "From: email@site.ru\nContent-Type: text/plain; charset=windows-1251\nContent-Transfer-Encoding: 8bit", "-femail@host.ru"); 

MIME_HTML_ONLY — необходимо добавить текстовую версию письма

Если SpamAssassin выдает MIME_ HTML _ONLY , то есть сообщение содержит только text/html , необходимо добавить текстовую версию письма text/plain .

При использовании класса PHPMailer в нем есть метод PHPMailer::MsgHTML($message, $basedir) , который следует использовать.

Для Joomla Virtuemart можно после $mailer->setBody( $body ); добавить:

$textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?/s', '', $body))); if (!empty($textMsg)) { $mailer->AltBody = html_entity_decode($textMsg, ENT_QUOTES, $mailer->CharSet); }

Источник

Отправка mail() в php

Рассмотрим, как отправить почтовое сообщение с помощью php функции mail(). В данной статье мы создадим максимально «белую» отправку, чтобы ваше письмо не попало в папку «Спам».

При создании нашего php кода для отправки функции mail() мы учтём моменты выше, чтобы минимизировать процент попадания письма в папку «Спам».

Создание файла mail.php и основных переменных

Создадим в корне сайта файл mail.php и добавим в него следующий код.

Отправка mail php

  • $admin_email — список получателей (через запятую);
  • $form_subject — тема письма;
  • $project_name — отправитель письма;
  • $html — начало HTML письма (далее мы его будет дополнять контентом).

Формирование текстовой версии письма (text/plain) и таблицы для HTML-версии

Сформируем таблицу $table для HTML-версии (text/html) почтового сообщения.

Затем в переменную $plain_text добавим текстовую версию. Всё это сделаем в цикле foreach. Также предусмотрим возможный вариант $_POST[«value»] в виде массива (значений чекбоксов).

$c = true; $plain_text = ""; $table = ""; foreach ($_POST as $key => $value) < if (is_array($value)) $value = implode(", ", $value); if ($value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject") < // text/html $table .= (($c = !$c) ? '' : '') . ' ' . $key . ' ' . $value . ' '; // text/plain $plain_text .= $key . ": " . $value . "\r\n"; > >

Таким образом, мы обработали полученные с фронтенда данные формы.

Доработка HTML-версии почтового сообщения

В первом пункте данной статьи мы создали файл mail.php и объявили основные переменные для нашего файла, в числе которых была переменная $html . Во втором пункте мы создали переменную $table , в которой сформировали HTML-таблицу из name и value. Теперь нам необходимо добавить таблицу с данными к переменной $html .

$html .= '  ' . $table . '

" . $form_subject . "

'; function adopt($text) < return "=?UTF-8?B?" . Base64_encode($text) . "?="; >$boundary = "--" . md5(uniqid(time())); // генерируем разделитель

Так же мы добавили функцию adopt для кодирования темы письма и сгенерировали разделитель, т.к. почтовое сообщение будет состоять из нескольких частей Content-Type: multipart/alternative.

Создание заголовков почтового письма

Сформируем заголовки в виде массива (для PHP >= 7.2).

$headers = array( "MIME-Version" => "1.0", "Date" => date("r (T)"), "From" => "Имя отправителя (компании) ", "Reply-To" => $project_name, "X-Mailer" => "PHP/" . phpversion(), "Content-Type" => "multipart/alternative; boundary=" . $boundary . "", );

Для более старых версий php необходимо создавать $headers без использования массива. В конце каждой строки нужно добавлять rn .

$headers .= "MIME-Version: 1.0" . "\r\n"; $headers .= "Date: " . date("r (T)") . "\r\n"; $headers .= "From: Имя отправителя (компании) " . "\r\n"; $headers .= "Reply-To: " . $project_name . "\r\n"; $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n"; $headers .= 'multipart/alternative; boundary="' . $boundary . '"';

Формирование итогового сообщения письма

Собираем воедино сообщение, которое будем использовать для отправки 3 параметром функции mail().

// Текстовая версия письма $message_plain_text .= "--$boundary" . "\n"; $message_plain_text .= "Content-Type: text/plain; charset=utf-8" . "\n"; $message_plain_text .= "Content-Transfer-Encoding: 8bit" . "\n\n"; $message_plain_text .= $form_subject . "\r\n" . $plain_text . "\n"; // HTML-версия письма $message_html .= "--$boundary" . "\n"; $message_html .= "Content-Type: text/html; charset=utf-8" . "\n"; $message_html .= "Content-Transfer-Encoding: 8bit" . "\n\n"; $message_html .= $html . "\n"; $multipart_alternative = $message_plain_text . $message_html . "--$boundary--" . "\n";

На что стоит обратить внимание:

Желательно чтобы заголовки From, Reply-To и Return-Path совпадали.

Только вместо Return-Path мы укажем обратный адрес e-mail в 5 параметре функции mail(). Это позволит избежать проблему №4 в начале данной статьи.

Отправка mail() в php с проверкой

Все необходимые переменные для заполнения параметров мы подготовили, осталось отправить письмо и в случае ошибки вернуть сообщение об этом.

if (!mail($admin_email, adopt($form_subject), $multipart_alternative, $headers, "-f " . $project_name))

Итоговый код

В результате наш mail.php должен выглядеть примерно так:

       '; $c = true; $plain_text = ""; $table = ""; foreach ($_POST as $key => $value) < if (is_array($value)) $value = implode(", ", $value); if ($value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject") < // text/html $table .= (($c = !$c) ? '' : '') . ' ' . $key . ' ' . $value . ' '; // text/plain $plain_text .= $key . ": " . $value . "\r\n"; > > $html .= '  ' . $table . '

" . $form_subject . "

'; function adopt($text) < return "=?UTF-8?B?" . Base64_encode($text) . "?="; >$boundary = "--" . md5(uniqid(time())); // генерируем разделитель $headers = array( "MIME-Version" => "1.0", "Date" => date("r (T)"), "From" => "Имя отправителя (компании) ", "Reply-To" => $project_name, "X-Mailer" => "PHP/" . phpversion(), "Content-Type" => 'multipart/alternative; boundary="' . $boundary . '"', ); // Текстовая версия письма $message_plain_text .= "--$boundary" . "\n"; $message_plain_text .= "Content-Type: text/plain; charset=utf-8" . "\n"; $message_plain_text .= "Content-Transfer-Encoding: 8bit" . "\n\n"; $message_plain_text .= $form_subject . "\r\n" . $plain_text . "\n"; // HTML-версия письма $message_html .= "--$boundary" . "\n"; $message_html .= "Content-Type: text/html; charset=utf-8" . "\n"; $message_html .= "Content-Transfer-Encoding: 8bit" . "\n\n"; $message_html .= $html . "\n"; $multipart_alternative = $message_plain_text . $message_html . "--$boundary--" . "\n"; if (!mail($admin_email, adopt($form_subject), $multipart_alternative, $headers, "-f " . $project_name))

PHP_ORIG_SCRIPT

Для удаления заголовка X-PHP-Originating-Script существует 2 способа
(если знаете ещё, поделитесь в комментариях):

php_flag mail.add_x_header Off

Чтобы не попасть в папку спам мы сделали всё от нас зависящее.
Остальные настройки вам необходимо делать на сервере: SPF, DKIM, DMARC, PTR.

Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.

Статьи из данной категории:

Источник

Message only has text/html MIME parts Вам нужно добавить текстовую версию письма (text/plain)?

5a674598ae9d8480117484.png

Перестали отправляться письма на mail.ru решил пройти тест на www.mail-tester.com
Получил такую картину:

Решил заморочиться вроде как с простой вещью «добавить текстовую версию письма» но не смог найти как этого сделать ?

Средний 6 комментариев

roswell

function mailPHP($To,$ToName,$Tema,$Text_us) < $From = // Реальная почта $FromName = $_SERVER['HTTP_HOST']; $dommen = strtolower(""); //реальный домен сайта $host = "localhost"; // неменять $pass = ""; // пароль от почты указанной ранее $header="Date: ".date("D, j M Y G:i:s")." +0300\r\n"; $header.="From: ".$FromName." \r\n"; $header.="Reply-To: ".$FromName." \r\n"; $header.="X-Mailer: The Bat! (v3.99.3) Professional\r\n"; $header.="X-Priority: 3 (Normal)\r\n"; $header.="Message-ID: \r\n"; $header.="To: ".$To."\r\n"; $header.="Subject: ".$Tema."\r\n"; $header.="MIME-Version: 1.0\r\n"; $header.="Content-Type: text/html; charset=utf-8\r\n"; $header.="Content-Transfer-Encoding: 8bit\r\n"; $header.="List-Unsubscribe: ".UNSUBSCRIBE_SF; $Text.='    
Доброго времени суток, уважаемый пользователь проекта '.mb_strtoupper(HTTP).' !
'.$Text_us.'
С уважением, команда '.HTTP.'
'; $smtp_conn = fsockopen($host, 25, $errno, $errstr, 10); if(!$smtp_conn) $data = get_data($smtp_conn); fputs($smtp_conn,"EHLO localhost\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 250) fputs($smtp_conn,"AUTH LOGIN\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 334) fputs($smtp_conn,base64_encode($From)."\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 334) fputs($smtp_conn,base64_encode($pass)."\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 235) $size_msg=strlen($header."\r\n".$Text); fputs($smtp_conn,"MAIL FROM: SIZE=".$size_msg."\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 250) fputs($smtp_conn,"RCPT TO:\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 250 AND $code != 251) fputs($smtp_conn,"DATA\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 354) fputs($smtp_conn,$header."\r\n".$Text."\r\n.\r\n"); $code = substr(get_data($smtp_conn),0,3); if($code != 250) fputs($smtp_conn,"QUIT\r\n"); fclose($smtp_conn); >

лучше бы использовал PHPMailer.
либо swiftmailer

и там и там это делается примерно 1 строкой

Источник

Оценка на mail-tester.ru 4,7, что делать?

Здравствуйте, проходил тест на сайте mail-tester.ru и получил оценку 4,7. Если честно, уже перебрал множество вариантов: менял хостинги, писал кучу текстов, но все равно выше 4,7 я не поднимался. В SpamAssasin выдает такое:
Знаменитый спам фильтр SpamAssassin. Оценка: -4.3.
Оценка ниже -5 считается спамом.
-0.001 HTML_MESSAGE HTML included in message
Не беспокойтесь, что мы ожидаем получить HTML-версию почтового сообщения
-1.996 MIME_HEADER_CTYPE_ONLY ‘Content-Type’ found without required MIME headers
-1.105 MIME_HTML_ONLY Message only has text/html MIME parts
Вам нужно добавить текстовую версию письма (text/plain)
0.001 SPF_HELO_PASS SPF: HELO matches SPF record
0.001 SPF_PASS SPF: sender matches SPF record
Отлично! Ваш SPF действителен
-0.1 SUBJECT_NEEDS_ENCODING Subject is encoded but does not specify the encoding
-1.105 SUBJ_ILLEGAL_CHARS Subject: has too many raw illegal characters

Что нужно исправить в тексте, подскажите пожалуйста.

Rsa97

MIME_HEADER_CTYPE_ONLY
В письме есть заголовок Content-Type, но нет сопутствующих заголовков. Добавьте заголовок MIME-Version и/или Content-Transfer-Encoding с корректными значениями.

MIME_HTML_ONLY
Если в письме есть HTML-часть, то рекомендуется, чтобы в нём была аналогичная по содержанию PLAIN-часть. Делайте multipart-письмо.

SUBJ_ILLEGAL_CHARS
В заголовках допускаются только символы из 7-битной части ASCII. Все остальные символы должны быть закодированы, например через Base64. В теле письма все символы должны соответствовать кодировке, указанной в заголовке Content-Type.

Да ничего, спамассассин указывает что в теле слишком много html и слишком мало текста.
в теме письма — неправильные символы. все это чушь

Вы пытаетесь подстроится под чужой сервер со своими настройками, этого делать не нужно.
Нормально у вас все в письмах, не переживайте. Тест до яндекса и гугла проходит? Если да, тогда выдохните и продолжайте настройку.

Когда я отправляю письмо, то оно попадает в спам, я свой мейл внес в базу и мои письма регулярно идут в эту папку.

StrontiumNPC, указанные выше «огрехи» письма не сделают его пошлют его в спам, по крайней мере не должны. Укажите больше входных данных, откуда отправляете, куда, попадание в спам в 100% случаев? Не попал ли ip отсылки в спам базы?

Сергей, Я добавил свою почту в базу и когда начал рассылку увидел свое письмо в папке «Спам». Рассылку веду с программы SPMailSender. Базу подписчиков собирал самостоятельно и чистил ее. Скрипт ведет рассылку от мощности хостинга beget.

Источник

Оцените статью