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