コンテンツにスキップ

Postmarkを使ってメールを送信する

Last reviewed: 5 months ago

このチュートリアルでは、Postmarkを使用してWorkersからトランザクションメールを送信する方法を学びます。このチュートリアルの最後には、以下のことができるようになります。

  • メールを送信するためのWorkerを作成する。
  • CloudflareドメインをPostmarkに追加してサインアップする。
  • Postmarkを使用してWorkerからメールを送信する。
  • シークレットでAPIキーを安全に保存する。

前提条件

このチュートリアルを続けるには、以下が必要です。

Workerプロジェクトの作成

まず、コマンドラインでC3を使用してWorkerプロジェクトを作成し、プロンプトに答えます。

Terminal window
npm create cloudflare@latest

または、CLI引数を使用して作業をスピードアップすることもできます。

Terminal window
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アカウントを持っていない場合は、こちらから無料アカウントにサインアップできます。サインアップ後、送信者署名を確認するためのリンクが届くので、受信トレイを確認してください。これにより、登録したメールアドレスからメールを送信できるようになります。

ドメインの他のアドレスからメールを送信できるようにするには、PostmarkダッシュボードのSender Signaturesに移動し、Add Domain or Signature > Add Domainを選択し、ドメインを入力してVerify Domainをクリックします。

次に、Cloudflareドメインに追加するDNSレコードのリストが表示されます。Cloudflareダッシュボードで、先ほど入力したドメインを選択し、DNS > Recordsに移動します。PostmarkからのDNSレコード(DKIMおよびReturn-Path)をCloudflareドメインにコピー/ペーストします。

CloudflareドメインにDNSレコードを追加する画像

それが完了したら、Postmarkに戻り、Verifyボタンをクリックします。すべてのレコードが正しく構成されていれば、ドメインのステータスがVerifiedに更新されるはずです。

Postmarkダッシュボードでのドメイン確認の画像

APIトークンを取得するには、Serversタブに移動し、My First Server > API Tokensを選択し、APIキーを安全な場所にコピーします。

Workerからメールを送信する

最後のステップは、すべてを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/に移動します。

Terminal window
npm start

npm run deployでWorkerをデプロイします。

APIトークンをシークレットに移動する

APIキーやトークンなどの機密情報は常にシークレットに保存する必要があります。すべてのシークレットは暗号化されており、追加の保護層を提供します。したがって、APIトークンをシークレットに移動し、Workerの環境からアクセスすることをお勧めします。

ローカル開発用のシークレットを追加するには、.envファイルと同様に機能する.dev.varsファイルを作成します。

POSTMARK_API_TOKEN=your_postmark_api_token_here

また、デプロイされたWorkerにシークレットが追加されていることを確認するために、次のコマンドを実行します。

デプロイされた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でこの更新をデプロイします。

関連リソース