
Отправка почты в Drupal, как оказалось, тема довольно обширная, и когда начинаешь работать с почтой, появляется много вопросов. Например — «Как в Drupal 8 отправить почту через SMTP» или «Почему plain text сообщения отправляются нормально, а html нет?». Эти вопросы условно можно разделить на две категории:
- Программные (где и какой код написать, чтобы отправить почтовое сообщение?)
- Административные (какие модуля рекомендуется доустановить для полноценной работы с почтой?)
В этой статье мы рассмотрим модули, с которыми желательно познакомиться для успешной работы с почтой в Drupal 8. В следующей статье будут рассмотрены вопросы по программной реализации почтового функционала в своих собственных модулях.
Вначале давайте определимся, какой транспортный механизм бы будем использовать для физической передачи почтового сообщения на сервер отправки. Всего есть 3 распространенных варианта:
Sendmail это весьма распространенный в Linux/Unix агент для отправки почты. При обращении к нему, сохраняет письмо на диск, благодаря чему возвращает результат очень быстро, но потом отправляет письмо самым обычным способом через SMTP сервер. Основная проблема с ним в том, что на локальном компьютере он зачастую не настроен, а на хостинге настроен на анонимную отправку без аутентификации через 25 порт SMTP. В результате любой современный почтовый сервер на стороне получателя не сможет установить отправителя такого письма, и будет относиться к нему крайне подозрительно, каждый раз помещая такое письмо в спам.
Такой способ отправки нам не подходит, он был хорош лет 10-20 назад, когда проблема спама не стояла так остро, и к входящим почтовым письмам было больше доверия как со стороны почтовых серверов так и со стороны конечных получателей.
PHP Mail это PHP надстройка над Sendmail, и поэтому также не представляет особого интереса.
SMTP — самый правильный из традиционных способов отправки почты. Подразумевает прямое подключение к SMTP серверу с валидным логином и паролем, благодаря чему письмо получается не-анонимным, и почтовые сервера относятся к нему с гораздо большим доверием. Впрочем, Gmail будет, скорее всего, так же скептичен как и в случае анонимного письма. Тогда почитайте про SPF и DKIM. Также, помимо «маркировок корреспонденции» Gmail оценивает содержимое письма, и в большинстве случаев находит к чему придраться. Поэтому к содержимому письма нужно относиться не менее ответственно чем к механизму его отправки, но по этим вопросам лучше обращаться к специалистам по email маркетингу. Нас же, в первую очередь, интересует программная составляющая.
В Drupal возможности для отправки почты через SMTP с авторизацией прямо из коробки нет, поэтому вопрос решается доустановкой дополнительных модулей. Но результат того стоит, поэтому мы будем использовать именно этот тип транспорта как основной.
Еще один не традиционный но очень эффективный способ отравки почты — обратиться к API почтового сервиса. Такой вариант предоставляет например SendGrid. Когда вам нужно отправить письмо, вы не отправляете его самостоятельно (через SMTP), а обращаетесь к API с просьбой типа «Вот у меня есть почтовое сообщение, отправь его пожалуйста вот этому адресату». И почтовый сервис уже берет это сообщение и занимается его отправкой. На сегодняшний день этот способ является самым эффективным и удобным, но мы его рассмотрим в другой раз, а пока нас будет интересовать традиционный SMTP.
Перейдем к рассмотрению модулей, которые добавляют недостающий SMTP функционал в Drupal.
SMTP Authentication Support
Это очень простой и удобный модуль, добавляющий возможность аутентификации для SMTP. Главным преимуществом этого модуля является то, что у него нет зависимостей от других модулей. Таким образом можно доустановить только его, и вся почта будет направляться через прописанный в настройках SMTP сервер. Главным недостатком является «непонятная» поддержка HTML. В настройках модуля есть галочка «Allow to send e-mails formatted as HTML», однако мне не удалось отправить с его помощью ни одного HTML письма. Хотя тот же Swift Mailer заработал сразу — достаточно было в заголовках письма указать Content-Type = text/html. В чем проблема — пока не знаю. Но для отправки plain text сообщений — модуль то что надо. В настройках есть все необходимое — два SMTP сервера, возможность указать порт, безопасность SSL/TLS, возможность задать адрес и имя отправителя.
Страница модуля SMTP Authentication Support
Страница с настройками SMTP Authentication Support
Mail System
Модуль Mail System, вообще говоря, сам ничего не делает. Но основная польза его в том, что он позволяет выбрать, какие плагины будут использоваться для форматирования и отправки сообщений. Подходящим плагином считается класс, реализующий \Drupal\Core\Mail\MailInterface и содержащий методы format() для форматирования и mail() для отправки. Это очень полезный модуль. Он позволяет задать, какие модуля будут отвечать за форматирование и отправку писем по умолчанию для всего сайта, для конкретного модуля, и даже для конкретного ключа (идентификатора типа сообщения, переменная $key в hook_mail()). Этот модуль удобен также для отладки — задаете здесь в явном виде модуля, ответственные за форматирование и отправку, и дебажите их, и не надо гадать каким путем пойдет письмо.
Откуда Mail System знает для каких модулей предлагать «module-specific» конфигурацию (вторая секция)? Очень просто — он выбирает из системы те модули, которые реализуют hook_mail().
Swift Mailer
Swift Mailer отлично дополняет функционал системы отправки почты в Drupal, предоставляя следующие дополнительные возможности:
- Отправка сообщений непосредственно через указанный SMTP сервер (SSL/TLS если нужно);
- Отправка сообщений с HTML форматированием;
- Добавление вложений;
- Встроенные «inline» изображения. В этом случае, если письмо содержит изображения, они сразу будут отображены, и пользователю не нужно нажимать «показать картинки» в Gmail;
- Возможность генерации plain text версии сообщения в дополнение к HTML версии, для тех устройств, которые не поддерживают отображение HTML. Дополнение вашего HTML сообщения plain text вариантом повысит репутацию письма при прохождении спам-фильтров (Почему важно дополнять HTML письма текстовой версией).
Swift Mailer отличный модуль, с пол-пинка отправляет HTML письма (достаточно указазать в hook_mail() в заголовках письма Content-Type = text/html) и благодаря бонусу в виде сопровождения письма его plain text копией, является идеальным решением там, где нужны письма с форматированием. Swift Mailer требует наличия Mail System, поэтому без Mail System в данном случае никак не обойтись.
Настройки отправляемых писем в Swift Mailer
На этом все, самые важные модули рассмотрели, в следующей части займемся программированием.
Оставить комментарий
Для отправки комментария вам необходимо авторизоваться.