ドキュメント本文へスキップ
ナレッジベース

Postmark から移行

Postmark のライブラリはそのままに、OpenEmail 経由で送信します。ホストとサーバートークンを変えるだけで、送信コードは今のままです。

変更する箇所

ライブラリの向き先を https://api.openemail.uk/compat/postmark にし、サーバートークンを入れる場所に emails:send 権限を持つ OpenEmail の API キーを入れます。キーは同じ X-Postmark-Server-Token ヘッダーで送られます。メールを送る呼び出しはそのままで、メッセージを送れるかどうかは、OpenEmail のどこでもそうであるように From アドレスで決まります。

import { ServerClient } from 'postmark' const client = new ServerClient(process.env.OPENEMAIL_API_KEY, {  requestHost: 'api.openemail.uk/compat/postmark',}) await client.sendEmail({  From: '[email protected]',  To: '[email protected]',  Subject: 'Your invoice',  HtmlBody: '<p>Your invoice is attached.</p>',  MessageStream: 'outbound',})

Node では、requestHost にホストとパスをまとめて指定し、スキームも末尾のスラッシュも付けません。Ruby では、path_prefix の両端にスラッシュが必要です。Python では、公式の postmark-python パッケージを base_url 付きで使ってください。コミュニティ製の postmarker パッケージはホスト配下のパスに届かないため、ここでは使えません。PHP では、PostmarkClient::$BASE_URL にスキーム、ホスト、パスを末尾のスラッシュなしで指定します。これは static なので、プロセス内のすべての Postmark クライアント(PostmarkAdminClient を含む)に適用されます。

対応関係

提供するエンドポイントは POST /email、/email/batch、/email/withTemplate、/email/batchWithTemplates です。フィールド名は Postmark と同様に大文字小文字を区別せずに照合し、空文字列は省略とみなします。

PostmarkOpenEmail では
From送信者と、その名前。
Toカンマ区切りの受信者。Cc と Bcc と合わせて、1 通あたり最大 50 人です。
ReplyTo返信先アドレスは 1 つ。
Subject件名。
HtmlBodyHTML 本文。TextBody はテキスト本文になり、どちらか一方が必要です。
HeadersName と Value で指定するカスタムヘッダー: X-*、List-*、Reply-To、Precedence、Auto-Submitted、Importance、Priority、Feedback-ID。
Attachmentsファイルは最大 20 個、合計 5 MB まで。HTML が cid: として ContentID を参照している画像は、その位置に埋め込まれます。それ以外のファイルは通常の添付として届きます。
Tagtag という名前のタグ。
Metadata同じ名前と値を持つタグ。Tag と合わせて、1 通あたり最大 10 個です。
TrackOpensそのメッセージの開封トラッキングをオン・オフします。
MessageStreamoutbound、またはほかのトランザクション用ストリームの ID なら、メッセージは通常どおり送信されます。
TemplateAliasOpenEmail テンプレートのスラッグまたは ID (tpl_...) で、TemplateModel の値が差し込まれます。InlineCss は受け付けますが、何も変わりません。

拒否されるものとその理由

  • TemplateId。ErrorCode 1101 を返します。Postmark のテンプレート ID はここでは意味を持たないので、OpenEmail でテンプレートを作り直し、そのスラッグか ID を TemplateAlias として送ってください。
  • broadcast ストリーム。ErrorCode 1236 を返します。これらのエンドポイントはトランザクションメールを送るもので、ニュースレターは OpenEmail のブロードキャストとして送ります。
  • テンプレートを使うメッセージの Subject、HtmlBody、TextBody。テンプレートが提供するため、ErrorCode 1123 を返します。TrackLinks の TextOnly も拒否されます。OpenEmail は HTML 部分のリンクをトラッキングするためです。
  • 複数の返信先アドレス、重複するかまたは上のリストにないヘッダー、10 個を超えるタグ、英字・数字・_・- 以外を含むタグ名や Metadata の名前。
  • 100 通を超えるバッチ。ErrorCode 410 を返します。Postmark は 500 通まで受け付けるので、大きなバッチは分割してください。

レスポンスとエラー

  • 送信は 200 を返し、To、SubmittedAt、MessageID、0 の ErrorCode、OK の Message を含みます。MessageID は OpenEmail のメッセージ ID で、GET /emails/{id} と Webhook が使うものです。Idempotency-Key ヘッダーは API のほかの部分と同じように動きます。
  • バッチは 200 を返し、メッセージごとの結果を同じ順に並べます。失敗したメッセージには ErrorCode と Message だけが入り、ほかのメッセージは送信されます。
  • エラーは ErrorCode と Message で返ります。キーがないか不明な場合、または emails:send のないキーの場合は、HTTP 401 と ErrorCode 10 です。それ以外は HTTP 422 で、ErrorCode 300 はメッセージ自体の問題、400 はキーが使えない From アドレス、401 はまだ送信できないドメイン、402 は JSON ではない本文、405 は送信枠を使い切ったワークスペースです。HTTP 413 は、本文が 10 MB (バッチでは 50 MB) を超えているか、添付が 5 MB を超えていることを示します。