Postmarkを使ってメールを送信する
このチュートリアルでは、Postmark ↗を使用してWorkersからトランザクションメールを送信する方法を学びます。このチュートリアルの最後には、以下のことができるようになります。
- メールを送信するためのWorkerを作成する。
- CloudflareドメインをPostmarkに追加してサインアップする。
- Postmarkを使用してWorkerからメールを送信する。
- シークレットでAPIキーを安全に保存する。
このチュートリアルを続けるには、以下が必要です。
- すでに持っていない場合は、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アカウントを持っていない場合は、こちらから無料アカウントにサインアップ ↗できます。サインアップ後、送信者署名を確認するためのリンクが届くので、受信トレイを確認してください。これにより、登録したメールアドレスからメールを送信できるようになります。
ドメインの他のアドレスからメールを送信できるようにするには、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キーやトークンなどの機密情報は常にシークレットに保存する必要があります。すべてのシークレットは暗号化されており、追加の保護層を提供します。したがって、APIトークンをシークレットに移動し、Workerの環境からアクセスすることをお勧めします。
ローカル開発用のシークレットを追加するには、.envファイルと同様に機能する.dev.varsファイルを作成します。
POSTMARK_API_TOKEN=your_postmark_api_token_hereまた、デプロイされたWorkerにシークレットが追加されていることを確認するために、次のコマンドを実行します。
npx wrangler secret put POSTMARK_API_TOKEN追加されたシークレットは、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でこの更新をデプロイします。