このチュートリアルでは、Workers から Postmark ↗ を使ってトランザクションメールを送信する方法を学びます。完了すると、次のことができるようになります。
- メールを送信する Worker を作成する。
- アカウントを作成し、Cloudflare ドメインを Postmark に追加する。
- Worker から Postmark を使ってメールを送信する。
- API キーを secrets で安全に保存する。
このチュートリアルを続けるには、次が必要です。
- Cloudflare アカウント ↗(まだ持っていない場合)。
- 登録済み のドメイン。
- インストール済みの npm ↗。
- Postmark アカウント ↗。
まずコマンドラインで C3 を使い、Worker プロジェクトを作成します。表示されるプロンプトに答えます。
npm create cloudflare@latest時間を短縮したい場合は、CLI 引数を使えます。
npm create cloudflare@latest email-with-postmark -- --type=hello-world --ts=false --git=true --deploy=false次の内容の、シンプルな hello-world Worker が作成されます。
export default {
async fetch(request, env, ctx) {
return new Response("Hello World!");
},
};Postmark アカウントをまだ持っていない場合は、無料アカウントに登録 ↗ できます。登録後、受信トレイで sender signature(送信者署名)の確認リンクを開きます。これで本人確認が済み、登録したメールアドレスからメールを送信できるようになります。
ドメイン上のほかのアドレスからも送信できるようにするには、Postmark ダッシュボードの Sender Signatures へ進み、Add Domain or Signature > Add Domain を選び、ドメインを入力して Verify Domain をクリックします。
次に、Cloudflare ドメインへ追加する DNS レコードの一覧が表示されます。Cloudflare ダッシュボードで、先ほど入力したドメインを選び、DNS > Records へ進みます。Postmark の DNS レコード(DKIM と Return-Path)を、Cloudflare ドメインへコピーして貼り付けます。
完了したら Postmark に戻り、Verify ボタンをクリックします。すべてのレコードが正しく設定されていれば、ドメインのステータスは Verified に更新されます。
API トークンを取得するには、Servers タブから My First Server > API Tokens へ進み、API キーを安全な場所にコピーします。
最後に、Worker にまとめます。Worker 内で fetch を使い、Postmark のメール API へ POST リクエストを送ります。トークンとメッセージ本文を含めます。
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: "hello@example.com",
To: "someone@example.com",
Subject: "Hello World",
HtmlBody: "<p>Hello from Workers</p>",
}),
});
},
};ローカルでコードを試すには、次のコマンドを実行し、ブラウザーで http://localhost:8787/ ↗ を開きます。
npm startnpm run deploy で Worker をデプロイします。
API キーやトークンなどの機密情報は、必ず secrets に保存してください。secrets はすべて暗号化され、保護が一段厚くなります。そのため、API トークンは secret に移し、Worker の環境から参照することをおすすめします。
ローカル開発用の secrets を追加するには、.env と同じように動作する .dev.vars ファイルを作成します。
POSTMARK_API_TOKEN=your_postmark_api_token_hereデプロイ済み Worker にも secret を追加するには、次を実行します。
npx wrangler secret put POSTMARK_API_TOKEN追加した secret は、Worker の fetch イベントハンドラーに渡される env パラメーターから参照できます。
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: "hello@example.com",
To: "someone@example.com",
Subject: "Hello World",
HtmlBody: "<p>Hello from Workers</p>",
}),
});
},
};最後に、npm run deploy でこの更新をデプロイします。