fintech-fab/fintech-fab.ru

Отправка писем через общий компонент

Closed this issue · 4 comments

Сейчас с сайта может быть отправлено одно письмо (заявка на стажировку). Возможно, скоро будет два (см. задачу #8 - приветственное письмо автору заявки на стажировку). Потом еще, и еще... Хочется чтобы отправка писем была собрана в одном месте. Нужно сделать класс-"компонент" (директория для классов-компонентов - FintechFab/Components), куда перенести отправку писем. Компонент должен работать примерно так:

$mailSender = new MailSender();
$mailSender->setParams(array(
  'to' => получатель,
  'name' => имя получателя,
));
$mailSender->doVanguardOrderAuthor();

что означает отправку приветственного письма автору заявки. Т.е. метод doVanguardOrderAuthor отправляет вполне конкретное письмо.

Непонятно, зачем здесь "setParams"?
Имя получателя письма сохраняется в памяти, и ему можно посылать несколько писем; то есть не меняя заданные параметры посылаем разные письма... одному и тому же адресату.

По-моему, если такое не нужно, то должно быть так:

$mailSender->doVanguardOrderAuthor(array(
  'to' => получатель,
  'name' => имя получателя,
));

Сейчас почту отправляет функция "postOrder()". Она анализирует результат отправки, и определяет текст всплывающего сообщения.
Пожалуй, содержимое этой функции нужно перенести в объект MailSender, частично или полностью.
Наверное, надо и текст всплывающего сообщения создавать в этом объекте, типа:
$mailSender.titleMessage
$mailSender.userMessage

Насколько я понял, нужны функции:

$mailSender->doVanguardOrder();
$mailSender->doVanguardOrderAuthor();

Все ок, мысли правильные, только

"надо и текст всплывающего сообщения создавать в этом объекте, типа:"

не согласен, т.к. сообщения пользователю на сайте это одно, а отправка писем - другое. Не стоит смешивать совсем разные штуки. Отправляем письмо одним объектом, получаем от него ответ, дальше уже "работаем с пользователем", если вообще посчитаем это нужным.

Насколько я понял, нужны функции:

Да.

В принципе сделано.

Для задачи #8 нужно только заполнить функцию

doVanguardOrderAuthor();

она расположена в

    app/FintechFab/Components/MailSender.php

Слито в мастер