‘ . $form_subject . ‘

Html and text parts are different

While looking at a problem where a DL was set to receive emails ONLY from Authenticated Users, I saw the message header was actually set to Internal by the Exchange Server. There are no Transport Rules which can manipulate the header and no third parties in between which can do this except Barracuda spam services but that’s not doing either. I can see that Exchange itself is marking the email as INTERNAL. externaldomain.com is NOT an Accepted domain. So I tried to send few other test emails and went through the header and all the emails are being marked as Internal, no email Authas is set to : Anonymous, I am basically stuck and wondering if this is some kind of bug, Can someone throw some light please.
Exchange is 2010 SP2 UR6, I will update SP3, meanwhile if someone has any thoughts, kindly let me know. Below is a part of header: From: UnAuthorized User
To:
X-TokenInfo-CID: 30
X-TokenInfo-UID: 90865
Message-ID:
Content-Type: multipart/alternative;
boundary=»————050203010401020108010202″
X-Barracuda-Connect: UNKNOWN[46.251.237.244]
X-Barracuda-Start-Time: 1384348232
X-Barracuda-URL: http://10.0.0.28:8000/cgi-mod/mark.cgi
X-Virus-Scanned: by bsmtpd at internaldomain.com
X-Barracuda-BRTS-Status: 1
X-Barracuda-Spam-Score: 0.74
X-Barracuda-Spam-Status: No, SCORE=0.74 using global scores of TAG_LEVEL=3.5 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=6.0 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_MOSTLY, MPART_ALT_DIFF, RDNS_NONE
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.142283
Rule breakdown below
pts rule name description
—- ———————- —————————————————
0.00 MIME_HTML_MOSTLY BODY: Multipart message mostly text/html MIME
0.00 HTML_MESSAGE BODY: HTML included in message
0.14 MPART_ALT_DIFF BODY: HTML and text parts are different
0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS
0.50 BSF_SC5_MJ1963 Custom Rule MJ1963
Return-Path: postmaster@armstronx.com
X-MS-Exchange-Organization-AuthSource: EXCHANGE.internaldomain.com
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 10
X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply

Читайте также:  Displaying error messages in php

Answers

X-MS-Exchange-Organization-AuthAs: Internal The above seems to indicate the sender has been authenticated. It could be the Barracuda as that would be connecting to the Exch servers receive connector and it depends on what permission you have set here for this. i.e ExternalAuthoritative and PermissionGroups ? This would set the headers to show internal and authenticated due to the permissions it sets, i.e Exch-Bypass-Anti-Spam, Ms -Exch-Bypass-Message-Size-Limit, Ms -Exch-SMTP-Accept-Any-Recipient and Ms -Exch-SMTP-Accept-Authentication-Flag etc. So I would be looking at the Baracuda. Sukh

  • Marked as answer by cara chen Moderator Monday, November 25, 2013 9:58 AM
  • Unmarked as answer by Sai Prasad Krishnan Monday, November 25, 2013 1:41 PM
  • Marked as answer by Sai Prasad Krishnan Monday, November 25, 2013 1:41 PM

A whole subnet was added to the connector that was created for Application relay, I increased protocol logging at the connectors and found nothing goes from Default Conn and all were using this connector since Barracuda was also part of that IP subnet.

I removed the subnet and added specific IP’s for relay (no barracuda IP) — all is well.

All replies

Hi, I recommand you disable Barracuda spam services and test again. That may help us to narrow down the cause of the issue. Thanks. Niko Cheng
TechNet Community Support

Источник

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() в 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.

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

Источник

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