Реализация отправки электронных писем по протоколу SMTP. Установка эмулятора почтового сервера для локальной разработки. Подключение шаблонизатора для рендеринга HTML-писем. Генерация ссылок с API на Frontend. Unit-тесты для процедур с использованием моков.
- 00:02:15 Обзор библиотеки Swift Mailer
- 00:05:19 Различия отправки писем в production и develop
- 00:08:34 Эмулятор почтового сервиса MailHog
- 00:13:16 Ручная проверка отправки писем в консоли
- 00:15:23 Настройка Swift Mailer в DI-контейнере
- 00:17:45 Письмо подтверждения регистрации
- 00:21:36 Тестирование JoinComfirmationSenderTest через моки
- 00:27:00 Настройка отправителя from по умолчанию
- 00:28:56 Абсолютный адрес фронтенда
- 00:30:22 Генератор адресов FrontendUrl
- 00:33:49 Подключение шаблонизатора Twig
- 00:37:29 Написание писем в формате HTML
- 00:40:50 Перенос генерации адресов в Twig-расширение
- 00:42:52 Тест для Twig Extension
- 00:48:27 Итоговые тесты
- 00:51:36 Код остальных сендеров
Скрытый контент (код, слайды, ...) для подписчиков.
Открыть →Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
Спасибо. Очень интересно. Очень хорошый урок. Здорово было, хотелось бы пасмотреть, как почта работает в реальных условиях (в продакшен) - с Яндексом или с Гуглом. Обещайте, пожалуйста, Дмитрий, что покажите, как сделать это до конца.
Реальную почту впишем, когда будем делать деплой через CI/CD Pipeline.
Большое спасибо.
Не работает плеер, ни в хроме ни в сафари.
В репозитории отсутствует файл
MailerCheckCommand.php
Мы делали эту команду только для имитации работы. В самом проекте она не нужна.
Спасибо за ответ
Дмитрий подскажите, пожалуйста, что то типа MailHog для sms, на SMPP протокол ? Какой пакет лучше использовать, если проект на Symfony 5, смотреть в сторону Symfony Notifier ?
Любой, который найдёте по запросу "docker smpp". Либо взять любой SMPP симулятор и самому через свой Dockerfile завернуть в Docker.
А если работаете через сервис с API, до достаточно будет сочинить свой эмулятор этого API.
Добрый вечер.
Подскажите пожалуйста, можно ли использовать mailhog для отправки писем на рабочем сервере?
Как я понимаю нужно в docker установить smtp сервер, чтобы была возможность отправлять письма. Подходит ли для этой цели mailhog?
Проект на symfony 5, использую smtp gmail.com.
Или лучше поискать на hub.docker.com другой smtp сервер для установки в docker образ?
Нет, mailhog - это лишь девелоперский эмулятор, не умеющий отправлять письма реально. Можно найти другой полноценный почтовик.
Но весь интернет заполонили спамеры, поэтому со своим почтовиком нужно приложить много усилий по правильной настройке DKIM, SPF и PTR, чтобы не попадать в спам. А для массовых рассылок нужно добавлять особые ссылки для отписки. И после этого переписываться с поддержкой MailRu если они случайно посчитают ваш IP-адрес спамерским.
Поэтому рекомендую всё-таки для одиночных системных писем остаться на Yandex и Gmail или почтовике своего хостинга с их лимитами. А если нужна массовая рассылка, то использовать специализированные платные сервисы рассылки вроде UniSender или MailChimp. Они сами всё это делают правильно.
Добрый день.
Я использую возможности symfony для отправки почты через аккаунт gmail.
Как в этом случае сделать возможным отправки писем.
Установлен пакет symfony/google-mailer v5.1.10
При отправке писем таким способом тоже велик шанс попасть в спам?
Если через Gmail, то всё нормально.
Да, но всё равно нужен smtp сервер в docker устанавливать?
Зачем?
А как в этом случае тогда настроить, чтобы уходили письма с сайта?
Опять же, не до конца понимаю как это будет работать.
Сейчас именно так настроено в docker контейнере, но письма не уходят.
Но если я укажу в настойках mailhog использовать порт 25 - всё работатет.
Для разработки настраиваете:
для отправки в Mailhog-эмулятор.
А на продакшене подставляете реальные данные:
для реально отправки через Gmail.
Именно так настроено, но почта не уходит.
Для разработки в mailhog уходит, но на реальный адрес нет.
Это уже проблема в Google. Либо вы в настройках ящика в Gmail отправку по SMTP не зазрешили, либо в поле FROM писем неверный адрес подставляете.
В gmail проблем нет, доступ разрешил.
Проверю from, возможно в нём ошибка.
Во
FROM
должен быть именно тот же ваш Gmail-адрес изMAILER_URL
. Чужие адреса подставлять нельзя.Проблема решилась.
Но включить доступ к аккаунту оказалось недостаточно.
Понадобилось ещё подтверждать доступ по ссылке https://accounts.google.com/DisplayUnlockCaptcha
Как я понял, это требуется если из нескольких мест пытаешься получить доступ к аккаунту. Хотя могу и ошибаться.
Если получится настроить dkim, spf, ptr и подобрать полноценный почтовик, то появится отправлять почту со своего сервера используя своё доменное имя для почтовых адресов?
Если получится, то появится. Но вместо этого намного проще создать почту для своего домена в Яндекс Connect или Google Workspace.
Дмитрий, как Вы и сказали, для хороших емейлов необходимо использовать таблицы, инлайновые стили. Но, как показывает практика, очень утомительно каждый раз прописывать их в каждом шаблоне.
Можно попробовать использовать плагин для вставки инлайновых стилей. https://github.com/tijsverkoyen/CssToInlineStyles
Ну или готовый плагин для swiftmailer (лучше самому написать 1 класс). https://github.com/OpenBuildings/swiftmailer-css-inliner
Может кому-то будет полезно. Или есть лучше способы обработки?
Шаблонов писем обычно не так уж и много, чтобы на них утомиться. А так да, конвертер интересный.
Дмитрий, имеет ли смысл вместо прямого использования Swift_Mailer, для начала написать какой нибудь свой адаптер со своим интерфейсом над ним? Как быть в будущем при замене библиотеки, когда будет создано большое количество сервисов по типу JoinConfirmationSender?
Отвечал на этот вопрос под скринкастом об обновлении мэйлера
Подскажите, в каком случае следует использовать ssmtp/msmtp в docker контейнере?
Если в контейнере запускаете shell-скрипт, который умеет отправлять письма через sendmail. Тогда можно вместо sendmail установить и настроить msmtp или exim, чтобы он отправлял письма через SMTP.
Или войти через: