Я не уверен, что согласен с подходом, согласно которому отправка электронных писем в том же процессе, который обслуживает запрос, - это путь. Как правило, лучше держать вещи простыми; обслуживайте запрос как можно быстрее, и пусть фоновые процессы выполнят всю тяжелую работу. Когда трафик увеличивается, а ваши серверы загружаются, этот подход сокращает время ожидания и делает пользователей счастливее. Это также поможет отделить ваши проблемы, которые помогут вам исправить ошибки и рефакторинг позже.
Лично я бы создал скрипт, который периодически запускается в фоновом режиме и проверяет все потоки на наличие новых действий. Если у потока есть новое действие, тогда сценарий может отправлять уведомления по электронной почте всем участникам. Это отделяет вашу логику отправки электронных писем от логики, используемой для обслуживания запросов, а также физически разделяет их - например, если ваш SMTP-сервер внезапно начинает отвечать на запросы, это не окажет сдерживающего влияния на время ответа на ваш запрос. Кроме того, если в часы пиковой нагрузки ваш сервер слишком загружен, вы можете просто прекратить запуск этого сценария и позволить серверу сосредоточиться на обслуживании запросов.
Чтобы запустить этот скрипт, вы, конечно, можете просто использовать CRON, и, как предлагается, запускать его раз в 4 минуты. Однако что делать, если сценарий занимает больше 4 минут? В конечном итоге вы получите два сценария, выполняющихся одновременно, что может привести к тому, что некоторые пользователи отправят одно и то же письмо дважды. Одним из решений этой проблемы было бы использование Fat Controller - демона, который я написал на C, который может периодически запускать любой скрипт (PHP, Python, что угодно) - это в основном демонизатор для всего. Важно отметить, что он может запустить новый экземпляр через x секунд после окончания предыдущего, поэтому вам не придется беспокоиться о нескольких экземплярах.
Fat Controller очень настраивается и может работать во всех режимах и даже обрабатывать несколько параллельных процессов. Вы можете прочитать больше об этом и некоторых случаях использования на сайте:
http://www.4pmp.com/fatcontroller/