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 と同様に大文字小文字を区別せずに照合し、空文字列は省略とみなします。
| Postmark | OpenEmail では |
|---|---|
| From | 送信者と、その名前。 |
| To | カンマ区切りの受信者。Cc と Bcc と合わせて、1 通あたり最大 50 人です。 |
| ReplyTo | 返信先アドレスは 1 つ。 |
| Subject | 件名。 |
| HtmlBody | HTML 本文。TextBody はテキスト本文になり、どちらか一方が必要です。 |
| Headers | Name と Value で指定するカスタムヘッダー: X-*、List-*、Reply-To、Precedence、Auto-Submitted、Importance、Priority、Feedback-ID。 |
| Attachments | ファイルは最大 20 個、合計 5 MB まで。HTML が cid: として ContentID を参照している画像は、その位置に埋め込まれます。それ以外のファイルは通常の添付として届きます。 |
| Tag | tag という名前のタグ。 |
| Metadata | 同じ名前と値を持つタグ。Tag と合わせて、1 通あたり最大 10 個です。 |
| TrackOpens | そのメッセージの開封トラッキングをオン・オフします。 |
| TrackLinks | HtmlAndText と HtmlOnly はクリックトラッキングをオンにし、None はオフにします。 |
| MessageStream | outbound、またはほかのトランザクション用ストリームの ID なら、メッセージは通常どおり送信されます。 |
| TemplateAlias | OpenEmail テンプレートのスラッグまたは 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 を超えていることを示します。