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

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

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

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

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

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

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

npm create cloudflare@latest

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

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

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

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

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

Если у вас ещё нет аккаунта Resend, вы можете зарегистрировать бесплатный аккаунт здесь. После регистрации перейдите в Domains с помощью бокового меню и нажмите кнопку добавления нового домена. В открывшемся окне введите домен, который нужно добавить, а затем выберите регион.

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

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

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

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

Наконец, перейдите к API Keys с боковым меню, чтобы создать ключ API. Дайте ключу понятное название и назначьте нужные разрешения. Нажмите кнопку добавления ключа, а затем скопируйте ключ API в надежное место.

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

Финальный шаг: собрать всё вместе в Worker. Откройте терминал в каталоге Worker, который вы создали ранее. Затем установите Resend SDK:

npm i resend

В Worker импортируйте и используйте библиотеку Resend следующим образом:

import { Resend } from "resend";

export default {
	async fetch(request, env, ctx) {
		const resend = new Resend("your_resend_api_key");

		const { data, error } = await resend.emails.send({
			from: "[email protected]",
			to: "[email protected]",
			subject: "Hello World",
			html: "<p>Hello from Workers</p>",
		});

		return Response.json({ data, error });
	},
};

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

npm start

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

Перенесите API-ключи в Secrets

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

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

RESEND_API_KEY=your_resend_api_key

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

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

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

import { Resend } from "resend";

export default {
	async fetch(request, env, ctx) {
		const resend = new Resend(env.RESEND_API_KEY);

		const { data, error } = await resend.emails.send({
			from: "[email protected]",
			to: "[email protected]",
			subject: "Hello World",
			html: "<p>Hello from Workers</p>",
		});

		return Response.json({ data, error });
	},
};

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