Вам наверное приходилось отправлять e-mail с сайта пользователям или самому себе в случае если, например, пользователь заполнил форму на сайте?
Если нет, ничего страшного, просто рассмотрим подводные камни с которыми обычно приходится сталкиваться)
Письма обычно отправляются php функцией mail(). Если ввести в поисковик запрос "mail php", то в подсказках увидите примерно следующее https://image.prntscr.com/image/wFcXpDqyRqaOn0Cods3_Uw.png
Да, основная проблема в том, что письма часто не доставляются из-за неправильного использования функции или просто по причине бана ip хостинга. Ещё очень часто на бесплатных или даже платных хостингах функция и вовсе запрещена.
Каково же решение проблемы?
Для начала, если функция mail на хостинге работает, то нужно просто её правильно использовать (передавать нужные заголовки и правильный e-mail отправителя).
Если же функция отключена на хостинге или же ip хостинга попал в спам фильтр почтовых служб, то тут как говорится "ваши полномочия всё. окончены" и нужно искать другие варианты.
Другим вариантом является использование SMTP.
Коротко об этом..
1. У вас должен быть почтовый ящик в какой-нибудь почтовой службе.
2. У почтовой службы должна быть возможность работы с SMTP (протоколом обычно есть у всех для работы с почтовыми клиентами на компьютере или телефоне).
3. Ваш сайт должен уметь подключаться к SMTP и отправлять письма.
Таким образом для почтовых служб все выглядит так, как будто вы вручную с компьютера или с телефона отправляете письма. Тут вам уже не нужно заботиться о заголовках, спам фильтрах (почти) и прочих особенностях.
Так вот к чему же всё это?
JohnCMS теперь умеет с этим работать.
Вы можете указать способ отправки писем: sendmail, smtp, или вообще можете складывать письма в папку на сайте. При смене хостинга вы сможете легко изменить способ отправки, при этом вам не нужно будет переписывать код отправки писем на всем сайте.
Отправка письма теперь выглядит так:
$mail = di(\Johncms\Mail\MailFactory::class);
$mail->setTo('vasya@example.com', 'Василий');
$mail->setSubject('Тема сообщения');
$mail->setBody('Текст сообщения');
$mail->send();
В качестве отправителя будет использован email из настроек сайта (при желании конечно для некоторых писем можно указать и другого отправителя с помощью метода setFrom, но для большинства случаев подойдет стандартный). Протокол, через который будет отправляться письмо и настройки, так же будут браться из конфига.Дальше для работы с e-mail будут ещё улучшения, но о них позднее)