INTEGRITY Документация

Отправка писем через Postmark

В этом руководстве вы узнаете, как отправлять транзакционные письма из Workers с помощью Postmark. По окончании этого руководства вы сможете:

Предварительные требования

Чтобы продолжить это руководство, вам потребуется:

Создайте проект Worker

Для начала используйте C3 чтобы создать проект Worker в командной строке и ответить на вопросы:

npm create cloudflare@latest

Также для ускорения можно использовать аргументы командной строки:

npm create cloudflare@latest email-with-postmark -- --type=hello-world --ts=false --git=true --deploy=false

Это создаёт простой Worker «hello world» со следующим содержимым:

export default {
	async fetch(request, env, ctx) {
		return new Response("Hello World!");
	},
};

Добавление домена в Postmark

Если у вас ещё нет аккаунта Postmark, вы можете зарегистрировать бесплатный аккаунт здесь. После регистрации проверьте почту: там будет ссылка для подтверждения подписи отправителя. Это подтверждает адрес и позволяет отправлять письма с зарегистрированного адреса электронной почты.

Чтобы разрешить отправку почты с других адресов вашего домена, перейдите в Sender Signatures в панели Postmark, Add Domain or Signature > Add Domain, затем введите свой домен и нажмите Verify Domain.

Далее вам будет показан список DNS-записей, которые нужно добавить к домену Cloudflare. В панели управления Cloudflare выберите домен, указанный ранее, и перейдите в DNS > Records. Скопируйте DNS записи (DKIM и Return-Path) из Postmark в ваш домен Cloudflare.

Изображение с примером добавления DNS-записей в домен Cloudflare

После этого вернитесь в Postmark и нажмите Verify кнопки. Если все записи настроены правильно, статус вашего домена должен измениться на Verified.

Изображение подтверждения домена на панели Postmark

Чтобы получить свой API-токен, перейдите в Servers вкладку, затем My First Server > API Tokens, затем скопируйте свой API-ключ в надёжное место.

Отправка писем из своего Worker

Финальный шаг: собрать всё вместе в Worker. В своём Worker отправьте POST-запрос с fetch к email API Postmark и укажите ваш токен и тело сообщения:

export default {
	async fetch(request, env, ctx) {
		return await fetch("https://api.postmarkapp.com/email", {
			method: "POST",
			headers: {
				"Content-Type": "application/json",
				"X-Postmark-Server-Token": "your_postmark_api_token_here",
			},
			body: JSON.stringify({
				From: "[email protected]",
				To: "[email protected]",
				Subject: "Hello World",
				HtmlBody: "<p>Hello from Workers</p>",
			}),
		});
	},
};

Чтобы протестировать код локально, выполните следующую команду и перейдите по адресу http://localhost:8787/ в браузере:

npm start

Разверните ваш Worker с помощью npm run deploy.

Перенесите API-токен в Secrets

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

Чтобы добавить секреты для локальной разработки, создайте .dev.vars файл, который работает точно так же, как .env файле:

POSTMARK_API_TOKEN=your_postmark_api_token_here

Также убедитесь, что секрет добавлен в развёрнутый Worker, выполнив команду:

Добавление секрета в развернутый Worker
npx wrangler secret put POSTMARK_API_TOKEN

Добавленный секрет доступен через env параметр, переданный обработчику события fetch вашего Worker:

export default {
	async fetch(request, env, ctx) {
		return await fetch("https://api.postmarkapp.com/email", {
			method: "POST",
			headers: {
				"Content-Type": "application/json",
				"X-Postmark-Server-Token": env.POSTMARK_API_TOKEN,
			},
			body: JSON.stringify({
				From: "[email protected]",
				To: "[email protected]",
				Subject: "Hello World",
				HtmlBody: "<p>Hello from Workers</p>",
			}),
		});
	},
};

И наконец разверните это обновление с помощью npm run deploy.