Для начала давайте разберемся, как сайт отправляет письма.
Есть два основных способа отправки писем:
- через PHP функцию mail(). Эта функция отправит ваше письмо в sendmail на сервере, откуда оно уйдет к получателю.
- используя удаленный SMTP сервер.
Обычно, после того, как пользователь нажал на кнопку отправки формы, PHP скрипт соединяется с почтовым сервером. Если соединение установлено успешно, то письмо передается на сервер и, таким образом, оно отправляется. В случае, если почтовый сервер недоступен (а причины могут быть разные: проблема с серверами, с соединением), то письмо отправлено не будет. Все это время, пока PHP скрипт пытается соединится с почтовым сервером, пользователь сайта будет видеть загружающееся окно, и ждать, пока соединение не отвалится по таймауту. Если соединится так и не получится, то в итоге он увидит сообщение об ошибке и ему придется отправлять форму еще раз. Иначе сообщение пропадет.
Альтернативный этому вариант - отправка писем асинхронно. Вместо того, чтобы отправлять письма сразу, мы можем положить их в очередь и отправить позже.
В Drupal в этом вам поможет модуль Queue Mail. Письма, созданные на сайте, добавляются в очередь. Они будут отправлены во время следующего запуска крона.
В Queue Mail есть возможность настроить:
- категории писем, которые отправлять через очередь;
- количество раз сколько нужно пытаться отправить письмо прежде, чем оно будет удалено из очереди;
- время между отправкой писем. Эта возможность поможет настроить частоту отправки писем, что бывает полезно если вы отправляете много писем и хотите, чтобы ваш сервер не посчитали спамерским.
Поэтому, использовать очередь при отправке почты стоит если:
- Нужно повысить скорость работы сайта - пользователям не придется ждать пока сообщение отправится во время отправки формы. Например разница между отправкой письма сразу через mail(), и вариантом с отложенной отправкой достигает 2 раз (по моим замерам если письма уходят сразу среднее время 11.76 миллисекунды, если мы кладем письма в очередь - 5.57 миллисекунды). Если отправляем письма через удаленный SMTP сервер, то там отправка происходит намного дольше
- Необходимо улучшится “user experience” сайта - пользователям не придется отправлять форму еще раз если есть проблемы с отправкой почты.
- Вы хотите сделать сайт более надежным - письма будут отправлены, как только восстановится возможность отправлять почту.
- Вам нужно больше возможностей по конфигурированию отправки почты.