- Html and text parts are different
- Answers
- All replies
- Message only has text/html MIME parts Вам нужно добавить текстовую версию письма (text/plain)?
- Отправка mail() в php
- Создание файла mail.php и основных переменных
- Формирование текстовой версии письма (text/plain) и таблицы для HTML-версии
- Доработка HTML-версии почтового сообщения
- Создание заголовков почтового письма
- Формирование итогового сообщения письма
- Отправка mail() в php с проверкой
- Итоговый код
- " . $form_subject . "
- PHP_ORIG_SCRIPT
- Статьи из данной категории:
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
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)?
Перестали отправляться письма на mail.ru решил пройти тест на www.mail-tester.com
Получил такую картину:
Решил заморочиться вроде как с простой вещью «добавить текстовую версию письма» но не смог найти как этого сделать ?
Средний 6 комментариев
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 и добавим в него следующий код.
- $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 .= ' " . $form_subject . "
' . $table . '