Рассылка собственными силами и средствами битрикса, или как не попадать в SPAM. Битрикс спам
почему письма попадают в спам? — Toster.ru
Поэтому вопрос к сообществу:
- Подключена почта от яндекса(pdd)- Формируем через CRM ответ лиду по e-mail, письмо с задержкой 20-30 минут тихо падает в спам- Кроме всего прочего лид указан адресатом 2 раза(To:)
Полные заголовки письма:
Received: from mxfront12g.mail.yandex.net ([127.0.0.1]) by mxfront12g.mail.yandex.net with LMTP id cRQxLe5A for <[email protected]>; Tue, 19 Sep 2017 14:12:02 +0300 Received: from mail-001.bitrix24.com (mail-001.bitrix24.com [46.235.53.71]) by mxfront12g.mail.yandex.net (nwsmtp/Yandex) with ESMTPS id pR94AZBLb6-Bu78jWwh; Tue, 19 Sep 2017 14:11:56 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client certificate not present) Return-Path: [email protected] X-Yandex-Front: mxfront12g.mail.yandex.net X-Yandex-TimeMark: 1505819516 Authentication-Results: mxfront12g.mail.yandex.net; spf=pass (mxfront12g.mail.yandex.net: domain of aparser.bitrix24.ru designates 46.235.53.71 as permitted sender, rule=[ip4:46.235.53.71]) [email protected] X-Yandex-Spam: 4 Received: from mon-ru.bitrix24.ru (mon-ru.bx24.net [10.10.10.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail-001.bitrix24.com (Postfix) with ESMTPS id 83A6C4400C for <[email protected]>; Tue, 19 Sep 2017 14:11:56 +0300 (MSK) Received: from cp.bitrix24.com (unknown [10.10.10.36]) by mon-ru.bitrix24.ru (Postfix) with ESMTP id 45C19206BA for <[email protected]>; Tue, 19 Sep 2017 14:11:56 +0300 (MSK) Received: from cp-linx-015 (localhost [127.0.0.1]) by cp.bitrix24.com (Postfix) with SMTP id 3C5742015A; Tue, 19 Sep 2017 14:11:56 +0300 (MSK) To: [email protected] Subject: =?UTF-8?B?dGVzdCBsaWRh?= From: =?UTF-8?B?0JzQuNGF0LDQuNC7INCu0YDRjNC10LLQuNGH?= <[email protected]> Reply-To: =?UTF-8?B?0JzQuNGF0LDQuNC7INCu0YDRjNC10LLQuNGH?= <[email protected]> To: [email protected] Subject: test lida Message-Id: <[email protected]> X-Priority: 3 (Normal) Date: Tue, 19 Sep 2017 14:11:56 +0300 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Yandex-Forward: fc21fd3b66f459c28acb802b1618a148 test 2<img src="http://aparser.bitrix24.ru/bitrix/tools/track_mail_read.php?tag=crm.eyJ1cm4iOiI0OC0wVlZBSzEifQ%3D%3D" border="0" alt="Read" />toster.ru
Рассылка собственными силами и средствами битрикса, или как не попадать в SPAM
Казалось бы, произвести рассылку со своего сайта дело нехитрое - в битриксе давно уже есть модуль рассылок, а сейчас появился и еще один - с модным названием "E-mail маркетинг". Но постойте... Почему же тогда до сих пор процветают различные сервисы рассылок, а компании ими активно пользуются? Одна из причин вполне понятна и заключается в предоставлении этими сервисами различных полезных услуг вроде статистики открываемости писем и пр. Но она не является основной. Например, меня не особо интересует эта статистика (у меня просто нет времени ее просматривать :)), возможно вы меня поймете).- https://www.mail-tester.com/ только 3 бесплатных проверки в день, но показывает подробную информацию об ошибках и варианты их решений, хотя и не лишен багов)
- http://isnotspam.com/
Т.е. если вы пытаетесь производить рассылку и не настраивали соответствующим образом сервер, существует большая вероятность попадания ваших писем в спам.
Далее я расскажу о всех настройках, связанных с почтовой системой на вашем сайте.
PTR запись
PTR запись (обратная NDS запись, reverse DNS record) - это домен, указываемый владельцем IP адреса как основной доверенный домен для этого IP адреса. Поэтому указывается он не там где остальные записи DNS, а на стороне хостинга.
Вообще запись PTR выглядят следующим образом для адреса 1.2.3.4 (т.е. это IP адрес наоборот плюс некая загадочная строка ".in-addr.arpa.")
4.3.2.1.in-addr.arpa. IN PTR ВАШ_ДОМЕН |
и в открывшемся окошке прописываете домен для IP адреса вашего сервера.
Кстати, для одного IP адреса можно указать только один домен, поэтому если у вас несколько сайтов на одном сервере, то для всех сайтов, с которых вы собираетесь производить рассылки, желательно (но не обязательно нужно) завести отдельный IP адрес со своей PTR записью.
SPF запись
Если вы используете собственный почтовый сервер, то просто добавьте запись вида
"v=spf1 ip4:1.2.3.4 ~all" |
"v=spf1 ip4:1.2.3.4 ip4:1.2.3.5 ~all" |
Например, в справке biz.mail.ru я нашел вот это:
"v=spf1 ip4:ВАШ_IP_АДРЕС a mx include:_spf.mail.ru ~all" |
"v=spf1 ip4:ВАШ_IP_АДРЕС1 ip4:ВАШ_IP_АДРЕС2 ip4:ВАШ_IP_АДРЕС3 include:_spf.yandex.net ~all" |
Запись DMARC во многих мануалах обходят стороной, возможно потому, что этот стандарт все еще считается достаточно новым. Dns txt запись DMARC определяет правила, которым нужно следовать в случае, если письма с вашего адреса признаны поддельными, должны ли они быть пропущены, положены в папку "Спам" или вообще не приняты почтовым сервером.
Тот же сервис mail-tester.com рекомендует добавить TXT запись
_dmarc.your-domain.com со значением
Именно так, в кавычках, хотя на многих DNS сервисах кавычки для TXT записей подставляются автоматически. Эта запись означает, что поддельные письма нужно пропускать. Также можно указать E-mail на который следует направлять жалобы в случае обнаружения поддельных писем, например:"v=DMARC1; p=none; rua=mailto:[email protected]" |
DKIM подпись
С DKIM подписью все немного сложнее, т.к. она, помимо DNS записи, которую она тоже требует, требует еще и установки необходимого ПО на сервер. Если ваша панель управления хостингом не позволяет устанавливать и настраивать DKIM, придется покопаться в консоли (в ISP Manager ищите пункт "Настройки сервера > Возможности"). Инструкции по настройке подписи могут отличаться для разных серверов, например, для моего Debian Squeeze (smtp - postfix) отлично сработала эта http://www.codenet.ru/webmast/dkim-postfix-debian/
Для проверки самой подписи могу порекомендовать этот тестер http://dkimcore.org/tools/keycheck.html В поле "Selector" там необходимо ввести селектор, который вы устанавливаете сами при настройке по на сервере, например, для поддомена "site._domainkey" этот селектор - "site".
Результатом этих манипуляций должна стать строка "DKIM Check: pass" в результатах проверки на указанных сервисах либо в исходном коде письма, принятого, например, на gmail.
Домен отправителя
Домен отправителя должен соответствовать домену, указанному в PTR записи. Обычно он устанавливается в конфигурационных файлах smtp-сервера. Например, в случае с сервером "postfix", в файле "/etc/postfix/main.cf" в параметре "myhostname". По умолчанию, там может быть задано что угодно, например, в моем случае было "debian-6-64-isplite.ru". Верстка и формат
Верстка html писем - дело, к сожалению, хлопотное. Веб-стандарты тут не работают, почтовые клиенты могут отображать письма по разному, а что касается веб-интерфейсов почты, то вообще не ждите, что письмо отобразится полноценно. И все это нужно учитывать.
Вообще я не рекомендую самостоятельно верстать письма, а лучше воспользоваться одним из наборов готовых шаблонов, например Foundation for emails http://foundation.zurb.com/emails/docs/ . Он адаптивный (responsive), т.е. рассчитан на отображение на всех устройствах и содержит все необходимое для верстки html-писем.
Имейте в виду, что при использовании шаблонов Foundation for emails, после верстки писем и проверки их в браузере, перед тестовой отправкой нужно проделать следующее
- Зайти сюда и преобразовать стили в инлайновые (кнопку "Copy to clipboard" не нажимать, копировать через Ctrl-C, иначе может появится такое "&nsbp;"). Если этого не сделать, то письмо будет отображаться корректно только в почтовых клиентах, но не в веб-интерфейсах почтовых сервисов.
- Проверить поиском нет ли лишних или пустых тегов <style>. Даже закомментированный тег <style> внутри <body>, который почему-то присутствует в шаблонах от Foundation, вызывает ошибку "STYLE_GIBBERISH - Nonsense in HTML" (стилевая абракадабра - нет смысла в HTML, вот так вот!! :) ) и снижает оценку известного спам фильтра SpamAssassin на целых 4 пункта!
База адресов
Одна из главных рекомендаций, которые дают все почтовые сервисы - это необходимость поддержания базы адресов в актуальном состоянии. Т.е. рассылки не должны производится на несуществующие адреса (хотя и непонятно, жалко им что ли :)). Поэтому после отправки очередного выпуска рассылки всегда нужно проверять, на какие адреса не удалось отправить почту и своевременно удалять (или деактивировать) их в базе. Чтобы найти проблемные адреса, я, например, после отправки выпуска запускаю в терминале команду mailq - она показывает адреса, которые "зависли" в очереди на отправку.
Репутация "рассыльщика"
Все крупные почтовые сервисы имеют специальные инструменты, позволяющие узнать некоторую информацию о доставке ваших рассылок (каждый из них требует подтверждения того, что вы являетесь владельцем домена, mail.ru и яндекс - загрузкой в корень сайта определенного html-файла, google - добавлением txt записи в dns).
Данные сервисы позволяют узнать, сколько ваших писем были отмечены как спам, сколько были открыты и пр. Яндекс позволяет также выбрать категорию вашей компании и ваших писем, а также указать стандартный шаблон сообщений.Результат
В результате выполнения вышеуказанных действий мне удалось изменить результат проверки mail-tester с 0 до 8 (8 а не 10 потому что я не отправлял текстовую версию письма и плюс к тому оказалось, что мой домен находится в одном черном списке).
g-rain-design.ru
1С-Битрикс. Защита от спама в регистрации без капчи
Не редкость, когда боты начинают регистрироваться на сайтах и захламлять списки пользователей своим присутствием. В «1С-Битрикс» можно включить капчу для защиты от спама. Но порой и капча не спасает, да и заставлять пользователей вводить код с капчи, я считаю, не гуманно. Воспользуемся другим трюком.
Этот трюк давно известен: в форму добавляется скрытое или невидимое поле. Если это поле заполнено, значит бот, если нет, значит обычный пользователь.
Разберем на основе регистрации
Скопируем шаблон системного компонента bitrix:system.auth.registration.
В файле template.php этого шаблона добавим новое поле, примерно так:
<tr> <td><?=GetMessage("AUTH_FAKE_NAME")?></td> <td><input type="text" name="<?php echo OlegPro\UserRegister::FAKE_FIELD_NAME1 ?>" maxlength="50" value="<?php echo $arResult[OlegPro\UserRegister::FAKE_FIELD_NAME1] ?>" /></td> </tr>В файле стилей шаблона надо прописать правила, чтобы скрыть это поле.
.urdn, .urdn td { display: none; }В файл result_modifier.php добавим обработку нашего фейкового поля:
<?php use OlegPro\UserRegister; $arResult[UserRegister::FAKE_FIELD_NAME1] = isset($_POST[UserRegister::FAKE_FIELD_NAME1]) ? htmlspecialcharsbx($_POST[UserRegister::FAKE_FIELD_NAME1]) : '';В файл lang/язык_сайта/template.php в папке скопированного шаблона добавим название фейкового поля:
$MESS['AUTH_FAKE_NAME'] = "Имя пользователя:";В файл /bitrix/php_interface/handlers/user_register.php добавим хэндлер-детектор ботов. Он будет срабатывать на событие OnBeforeUserRegister модуля main. Если наше фейковое поле заполнено, то выбросим битриксовкий эксепшн и добавим сообщение об ошибке.
<?php namespace OlegPro; class UserRegister{ const FAKE_FIELD_NAME1 = 'NAME'; @param @return public static function OnBeforeUserRegister(&$arFields){ global $APPLICATION; if(isset($_REQUEST[self::FAKE_FIELD_NAME1]) && strlen(trim($_REQUEST[self::FAKE_FIELD_NAME1])) > 0){ \CEventLog::Add(array( "SEVERITY" => "SECURITY", "AUDIT_TYPE_ID" => "USER_REGISTER_FAIL", "MODULE_ID" => "main", "ITEM_ID" => "UNKNOWN", "DESCRIPTION" => sprintf("Попытка регистрации ботом. Код ошибки [FK1].\n%s", var_export($_REQUEST, true)), )); $APPLICATION->ThrowException('Ошибка регистрации. Код ошибки [FK1].'); return false; } return true; } }В /bitrix/php_interface/init.php добавим автозагрузку нашего обработчика и навесим обработчик:
\Bitrix\Main\EventManager::getInstance()->AddEventHandler('main', 'OnBeforeUserRegister', array('OlegPro\UserRegister', 'OnBeforeUserRegister')); CModule::AddAutoloadClasses( '', array( 'OlegPro\UserRegister' => '/bitrix/php_interface/handlers/user_register.php', ) );Результат
Теперь в журнале событий вот такая картина:
P.S.Кстати, этот способ работает и у меня в блоге, в форме добавления комментария к посту.
www.olegpro.ru
1С-Битрикс. Кастомный валидатор поля веб-формы или защита от спама в модуле «Веб-формы» без капчи
Про защиту от спама в регистрации без включения капчи я уже рассказывал. На очереди борьба с ботами в модуле Веб-формы в битриксе, а так же расскажу как написать свой валидатор.
Защищаться будем по схеме, описанной в заметке про регистрацию, а именно: добавляем в форму невидимое поле, если поле заполнено — к нам пришёл бот.
Предположим, форма у вас создана, поля(в понятии модуля форм — «вопросы») для неё заведены и настроены. Заведём ещё одно, служебное, с типом text (поля типа hidden боты иногда игнорируют и не заполняют). В свойствах «Символьный идентификатор» ему надо придумать, как обычному полю, например user или name. Не стоит называть его antibot.
В поле «Текст ответа» чтобы не писать название, можно считерить и вписать неразрывный пробел (в юникоде: Alt + 0160).
Как вы помните, нам нужно проверять поле на пустоту. По умолчание доступны валидаторы:
- [number_ext] Число в пределах
- [text_len] Длина строки
- [number] Целое число
- [INN] Проверка ИНН
Вроде бы подходит валидатор text_len. У него в настройках есть 2 параметра: «Минимальная длина», «Максимальная длина». Но для настройки «Максимальная длина» минимум можно указать 1, а нам нужно 0. Можно поставить и 1, но я решил написать свой валидатор, тем более, что я никогда этого не делал.
Документация по написанию своих валидаторов тут. Там всё просто: пишем PHP-класс с нужными методами и подвешиваем его на нужное событие.
Получился вот такой класс валидатора:
<?php namespace Olegpro; use \Bitrix\Main\EventManager; class FormValidatorStringEmpty { function getDescription() { return array( 'NAME' => 'empty_string', 'DESCRIPTION' => 'Пустая строка', 'TYPES' => array('text'), 'SETTINGS' => array(__CLASS__, 'getSettings'), 'CONVERT_TO_DB' => array(__CLASS__, 'toDB'), 'CONVERT_FROM_DB' => array(__CLASS__, 'fromDB'), 'HANDLER' => array(__CLASS__, 'doValidate') ); } function getSettings() { return array(); } function toDB($arParams) { return serialize($arParams); } function fromDB($strParams) { return unserialize($strParams); } function doValidate($arParams, $arQuestion, $arAnswers, $arValues) { global $APPLICATION; foreach ($arValues as $value) { if (strlen(trim($value)) > 0) { $APPLICATION->ThrowException('Ошибка заполнения полей формы. Код ошибки [FKWF1].'); return false; } } return true; } }Положил я его по пути: /bitrix/php_interface/handlers/form_validator_string_empty.php
Ну а подключить его нужно в файле /bitrix/php_interface/init.php
use \Bitrix\Main\EventManager; use \Bitrix\Main\Loader; EventManager::getInstance()->addEventHandlerCompatible('form', 'onFormValidatorBuildList', array('Olegpro\FormValidatorStringEmpty', 'getDescription') ); Loader::registerAutoLoadClasses(null, array( 'Olegpro\FormValidatorStringEmpty' => '/bitrix/php_interface/handlers/form_validator_string_empty.php', ));После этого у поля на вкладке «Валидаторы» появится новый валидатор «[empty_string] Пустая строка»:
Его-то и нужно добавить к нашему полю для защиты от спама.
Последнее что осталось: скрыть это поле через CSS, чтобы пользователи его не видели.
www.olegpro.ru