В идеале контроллер должен быть похож на оператора, связывающего представление с моделью. Это относится либо к модели, либо к уровню обслуживания.
Я бы сказал, что это относится к уровню модели, только если у вас есть объект модели, который несет полную ответственность за отправку электронной почты. Вы не хотите объединять представление и логику, вот и вся точка разделения проблем в Model-View-Controller.
Этот тип логики должен находиться на уровне сервиса. После этого вы можете использовать внедрение зависимостей для внедрения службы в контроллер и вызова EmailSenderService.sendEmail ();