Вопрос слишком широкий. Но я попытаюсь бросить одну «лучшую практику» на ринг.
Не отправляйте электронные письма прямо с вашего веб-сайта - код обслуживания. Сделайте запись в какое-то постоянное хранилище, например, в таблицу базы данных. И создайте фоновый процесс, который будет сканировать эту таблицу с заданным интервалом, скажем, каждые 5 минут, обнаруживать любые новые записи и отправлять электронные письма.
Вы защитите код своего веб-сайта от любых задержек или сбоев, связанных с отправкой электронной почты. Ваше приложение всегда будет знать, где оно остановилось при перезапуске после сбоя или обновления системы. У вас будет проверенная запись об отправленных электронных письмах.