Хостинг Netlify выгодно отличается от конкурентов встроенной возможностью обработки форм, размещённых на сайте, и отправкой Email-сообщений из формы на любой адрес или несколько адресов. Причём, на бесплатном тарифе можно отправлять до 100 сообщений в месяц. Но что делать, если Email-сообщения необходимо отправлять не из формы, а по другому событию? Для этого Netlify предлагает готовую интеграцию с тремя популярными сервисами отправки Email-сообщений:
Далее я покажу как настроить отправку Email-сообщений с сайта, размещённого на хостинге Netlify, при помощи сервиса Postmark, который позволяет отправлять до 100 сообщений в месяц бесплатно:
Регистрируемся на сервисе Postmark. При этом, нужно быть готовым к следующим ограничениям:
1.1. Сервис Postmark не позволяет зарегистрироваться с использованием Email-адреса общего пользования, таким как @gmail.com, @mail.ru, @yandex.ru и т.п. Для регистрации нужно воспользоваться Email-адресом в своём или корпоративном домене.
1.2. После регистрации необходимо дождаться подтверждения аккаунта, которое, по соображениям безопасности, делается вручную сотрудниками сервиса Postmark. Ожидание подтверждения аккаунта может продлиться до 24 часов в рабочие дни или более на выходных.
После подтверждения аккаунта Postmark необходимо выполнить ещё некоторые настройки:
2.1. Если для отправки Email-сообщений используется личный домен или домен, для которого есть возможность редактирования DNS-записей, то желательно добавить две DNS-записи, как показано на скриншоте, чтобы можно было отправлять Email-сообщения с любого адреса в домене:
2.2. Если для отправки Email-сообщений используется корпоративный домен, для которого нет возможности редактирования DNS-записей, то оправлять Email-сообщения можно будет только с подтверждённых адресов:
npm i @netlify/emails
npm i @netlify/functions
npm i netlify-cli
netlify.toml
:[functions];
node_bundler = 'esbuild';
emails
, которая была указана в поле «Emails directory» в настройках Email-интеграции Netlify по умолчанию. В этой папке можно создать несколько шаблонов для исходящих Email-сообщений. Для каждого шаблона создаётся отдельная подпапка с файлом index.html
внутри. Название подпапки является названием шаблона. В данном примере шаблон будет иметь наименование notice
:<html>
<body>
<p>Hello, {{name}}!</p>
</body>
</html>
netlify
, а в ней подпапку functions
, которая будет содержать функции Netlify. Для отправки Email-сообщений создаём файл notify.ts
:import { sendEmail } from '@netlify/emails';
import type { Handler, HandlerEvent, HandlerContext } from '@netlify/functions';
const handler: Handler = async (event: HandlerEvent, context: HandlerContext) => {
await sendEmail({
from: 'name@domain.ru',
to: 'name@gmail.com',
subject: 'Subject',
template: 'notice',
parameters: {
name: 'World'
}
});
return { statusCode: 200 };
};
export { handler };
npm run build
npx netlify deploy --auth ACCESS_TOKEN --site SITE_ID --dir BUILD_DIR --prod --build
В этой команде необходимо заменить ACCESS_TOKEN
, SITE_ID
и BUILD_DIR
на свои значения. Создание «Personal Access Token» показано в п.6 выше, «Site ID» можно найти в настройках сайта на Netlify, а название папки финальной сборки сайта зависит от используемого генератора и его настроек.
fetch('/.netlify/functions/notify').then((response) => console.log(response.status));