Настройте свой собственный почтовый сервер за считанные минуты

Отправка электронных писем пользователям становится все более популярной функцией. Влиятельные лица в социальных сетях собирают свои собственные списки адресов электронной почты для будущих продаж продуктов, и бренды делают то же самое, чтобы оставаться на связи со своими пользователями и поддерживать узнаваемость бренда. Многие SaaS-компании создаются, чтобы помочь людям автоматизировать отправку электронной почты. Тем не менее, они стоят немалых денег за очень небольшую работу.

Если вы разработчик с базовыми навыками в Node.js или Python, почему бы не использовать AWS, чтобы довольно быстро создать это с нуля?

Вариант использования почтового сервера обычно сильно отличается от сценария использования сервера приложений. Сервер приложений, особенно для большого приложения, работает круглосуточно и без выходных, чтобы быстрее отвечать на запросы пользователей. Однако отправка электронных писем - это очень небольшая функция, которая не требует какого-либо состояния и необходима для работы «по запросу», а не 24/7. Это ставит галочки во всех полях для варианта использования безсерверной архитектуры. Кроме того, если мы используем AWS, мы увидим, насколько легко создать такую ​​архитектуру.

Давайте начнем.

Шаг 1. Подтверждение электронной почты

Войдите в Консоль AWS, а затем перейдите в раздел SES (Simple Email Service) в разделе Services. Отсюда перейдите к Адреса электронной почты слева, нажмите Подтвердить новый адрес электронной почты и пройдите процесс проверки электронной почты. Это позволит вам отправлять электронную почту через ваш адрес электронной почты. Первоначально вы также будете помещены в среду песочницы, где вы сможете отправлять электронную почту только на свой подтвержденный адрес электронной почты. Давайте сначала пройдемся через этот процесс и настроим весь код. Затем я также покажу вам, как писать другим людям.

Шаг 2: Создание лямбда-функции

После того, как ваш адрес электронной почты подтвержден, пришло время создать лямбду. Если вы прочитали эту статью, вы уже знаете, как ее создать, но давайте быстро пройдемся по ней и здесь. Перейдем к сервису Lambda на панели управления AWS. Оказавшись здесь, нажмите оранжевую кнопку Создать функцию. Дайте ему имя, оставьте все остальные настройки такими же и нажмите Создать функцию.

После создания функции, если вы прокрутите вниз, вы увидите раздел «Код функции» с некоторым шаблонным кодом. Давайте заменим это чем-нибудь полезным. Я написал этот базовый фрагмент кода, который отвечает на событие, отправляя электронное письмо:

Примечание: может показаться странным, что мы не установили aws-sdk, запустив npm install, а затем загрузили сжатый проект, но это потому, что AWS делает этот SDK доступным для нас, когда мы находимся в их среде Node вместе с основным Node. такие пакеты, как fs и https.

Итак, что делает этот код? Он извлекает to адрес электронной почты и subject из тела входящего запроса события. Затем он использует fs для чтения HTML-шаблона, который мы еще не написали для нашей электронной почты. Затем он пытается отправить электронное письмо с соответствующими параметрами и выявляет любые ошибки. Затем мы выводим эти ошибки на консоль, чтобы мы могли проанализировать, если что-то пойдет не так в другом сервисе AWS, называемом CloudWatch. Теперь давайте напишем HTML-код для нашего шаблона электронной почты. Вы можете настроить электронную почту в соответствии со своими требованиями и использовать CSS, чтобы она выглядела красиво. Однако, чтобы сэкономить время, я просто использовал шаблон электронной почты, который нашел в сети. Не стесняйтесь использовать тот же самый, другой или написать один самостоятельно. Для этого щелкните правой кнопкой мыши папку слева и выберите Новый файл. Поскольку мы решили назвать наш шаблон электронной почты body.html в нашем коде JavaScript, мы должны убедиться, что мы присвоили нашему HTML-файлу соответствующее имя, а затем вставить / записать туда наш HTML-код.

После этого нажмите оранжевую кнопку «Сохранить», чтобы сохранить весь наш код.

Шаг 3. Создание шлюза API

Теперь давайте вернемся вверх и нажмем кнопку «Добавить триггер».

На следующем экране выберите «API-шлюз», затем выберите «Создать API», оставьте значение по умолчанию «HTTP API», выберите «Открыть» конфигурацию безопасности и нажмите кнопку «Добавить».

Теперь существует новый API-шлюз с URL-адресом:

Давайте скопируем URL этой конечной точки и перейдем к Postman. Если у вас не установлен Postman, сделайте это. Вы также можете использовать другое приложение, например curl, интерфейс командной строки, который предустановлен на компьютерах Mac, или написать собственный код JavaScript, который обращается к этой конечной точке со свойствами to и subject в теле запроса, чтобы наша Lambda знала, кому отправлять электронное письмо и с какой темой. Я использую Postman, поэтому мой запрос выглядел так:

А вот команда curl, если вам лень:

curl -d '{"to": "[email protected]", "subject": "welcome to my email list!"}' -H 'Content-Type: application/json' https://fxy8lk3ta8.execute-api.eu-central-1.amazonaws.com/default/My-Email-Lambda

Просто замените адрес to на свой подтвержденный адрес электронной почты. Если вы отправите этот запрос или посмотрите на снимок экрана Postman выше, вы узнаете, что запрос не удался. К счастью, мы выводили все сбои на консоль, поэтому давайте посмотрим в наших журналах, чтобы выяснить, что пошло не так с нашей лямбда-функцией. Давайте перейдем к сервису CloudWatch на нашей панели управления AWS, нажмите «Группы журналов» на левой панели, нажмите на имя нашей Lambda, а затем нажмите оранжевую кнопку «Поиск в группе журналов». Здесь вы сможете увидеть все журналы всех запросов к вашей Lambda. Если вы нажмете на журнал, помеченный меткой времени и ERROR в его имени, вы сможете увидеть подробную информацию о том, почему запрос к этой Lambda не удался. Это должно выглядеть примерно так:

Журнал довольно подробный и полезный. Это ясно объясняет нам, что наша Лямбда не имеет разрешений на выполнение действия ses:SendEmail.

Шаг 4: Предоставление разрешений лямбда

Ресурсу AWS типа Lambda назначена роль. У этой роли есть политики, и у этих политик есть разрешения. Итак, чтобы предоставить нашей Lambda больше разрешений, мы должны сначала создать политику, дать ей правильные разрешения и, наконец, привязать эту политику к нашей роли Lambda.

Вернемся к нашей лямбде. Здесь щелкните вкладку «Разрешения», а затем щелкните роль в разделе «Роль выполнения». По умолчанию его имя будет похоже на имя вашей лямбды. В моем случае он называется My-Email-Lambda-role-5oclgv0j. На экране «Сводка» роли нажмите «Присоединить политики», затем нажмите «Создать политику». Теперь мы создадим политику, которая будет иметь правильные разрешения. Нам нужно разрешение «SendEmail» (как мы знаем из журналов на шаге 3), которое относится к службе «SES». Вот скриншот, который поможет вам это настроить:

Для простоты на следующем этапе настройки политики выберите «Все ресурсы»:

Затем нажмите «Проверить политику», дайте нашей политике описательное имя, например «SendingEmailsPolicy», затем нажмите «Создать политику». После успешного создания политики давайте вернемся на страницу сводки нашей роли. Вы сможете легко найти его в сервисе «IAM» - ›Роли -› Имя вашей роли.

Оказавшись на этом экране, нажмите кнопку «Присоединить политики», найдите политику, которую мы только что создали ранее (надеюсь, вы выбрали описательное имя), а затем нажмите «Присоединить политику».

Теперь, если мы снова активируем нашу лямбду с помощью этой команды:

curl -d '{"to": "[email protected]", "subject": "welcome to my email list!"}' -H 'Content-Type: application/json' https://fxy8lk3ta8.execute-api.eu-central-1.amazonaws.com/default/My-Email-Lambda

Мы получаем ответ в нашем терминале: «Электронное письмо отправлено!» Давайте перейдем к нашей электронной почте, чтобы подтвердить это:

Большой! Я получил электронное письмо от себя, но мы настроили наш код и архитектуру так, что если мы хотим отправлять электронные письма другим, мы можем просто сделать это, имея интерфейс веб-сайта с вводом текста электронной почты и кнопкой отправки. Кнопка «Отправить» должна отправить запрос в нашу конечную точку API и, следовательно, отправить по электронной почте введенный пользователем адрес электронной почты.

Электронная почта другим

Как обсуждалось в шаге 1, в настоящее время вы находитесь в среде песочницы. Это имеет определенные ограничения. Вы можете отправить по электронной почте только свой подтвержденный адрес электронной почты. Вы можете отправить не более 200 писем за 24 часа. Вы можете отправлять не более одного электронного письма в секунду. Если вы планируете использовать этот сервис для отправки электронной почты нескольким своим пользователям, вам нужно будет запросить AWS, чтобы вывести вашу учетную запись из песочницы. Это довольно просто, и обычно группа поддержки AWS проверяет это в течение 24 часов. Для этого вы можете следовать этому руководству.

Надеюсь, вам эта статья показалась интересной и полезной. Спасибо за прочтение!