Какой оптимальный вариант отсылки почты в background.
Есть форма, по форме происходит некоторое действие, результатом которого должна стать отсылка письма пользователю.
С учетом соединения с почтовым сервером — это вызывает некоторую задержку при реакции на отсылку формы, какой оптимальный способ отреагировать на изменения формы моментально, а отправку письма реализовать в паралели так сказать.
У меня на сервере крутиться почтовый демон, написаный на php, в БД пять таблиц (по важности). Когда нужно отправить письмо, ложу его в определенную таблицу в зависимости от срочности. Демон подхватывает письма, отправляет их.
Отправить письмо локальному MTA на том же сервере, а тот уже сам передаст дальше.
Если отключить строгое соответствие RFC, то локальная отправка должна быть очень быстрой.
В том то и дело что использовать локальный MTA не получится к сожалению. Не так чтобы я этого не хотел, просто ситуация такова что лучше этого избежать.
Это создает нехорошую задержку в минуту, можно подумать, что что-то сломалось. Куда как приятнее вместе с сообщением «Спасибо за ваше сообщение» увидеть уведомление о новом письме.
Если используется php-fpm и нет нужды в сложной логике очередей — можно использовать функцию fastcgi_finish_request(). Вызов функции принудительно отправляет ответ клиенту, а скрипт продолжает выполнение в бэкграунде.