ドキュメント本文へスキップ
CLI

連絡先、オーディエンス、一斉配信

アドレス帳、オーディエンス、一斉配信、抑止リストのすべてのコマンドと実例。

それぞれの関係

メールを送る相手は 4 つの名前空間で扱います。連絡先はワークスペースのアドレス帳、オーディエンスは名前付きの連絡先リスト、一斉配信はいくつかのオーディエンスの全員に 1 つのメッセージを送るもの、抑止リストはワークスペースが送信しないアドレスを保持するものです。各コマンドは SDK のメソッドを 1 つ呼び出すので、SDK のページでは同じ呼び出しをさらに詳しく説明しています。

  • 連絡先には ID がありません。すべての contacts コマンドはアドレスをキーとして受け取り、前後の空白を除いて小文字にするので、[email protected] と [email protected] は同じ連絡先です。オーディエンスには aud_ の ID、一斉配信には brd_ の ID があり、抑止には suppressions list が表示する ID があります。
  • すべての連絡先は、存在する限り既定のオーディエンスに含まれます。そのオーディエンスは削除することも、空にすることも、連絡先を外すこともできず、builtin は default です。
  • アドレス帳はワークスペースに属するので、すべてのメンバーとすべてのキーが同じアドレス帳を読み書きします。
  • 各名前空間は openemail contact get のように単数形でも使え、いつもの別名 ls、show、new、edit、rm も使えます。動詞が add と remove の suppressions では、new は add に、rm は remove になります。

openemail <namespace> <verb> --help は、すべてのフラグをその型、スコープ、エンドポイント、コマンドが返す内容とともに表示します。--json を付けると、同じページをデータとして出力します。

連絡先

ワークスペースのアドレス帳です。メンバーがアプリの作成画面からメールを送った相手と、手動で保存した人が入ります。届いたメールで誰かが追加されることはなく、API や CLI からの送信でも追加されません。

コマンド機能
openemail contacts list保存された連絡先を、最近メールした順に 1 ページ表示します。--source で manual か auto の連絡先に絞り、--q で名前とアドレスを検索します
openemail contacts get <email>1 件の連絡先を、所属するすべてのオーディエンスとともに
openemail contacts create --email <value>--name、--notes、--audience-ids を付けて新しい連絡先を保存します。すでにアドレス帳にあるアドレスは 409 contact_exists で拒否されます
openemail contacts update <email>--name や --notes を変更します。null を渡すと消去されます。アドレスそのものは変更できません
openemail contacts delete <email>連絡先をメモ、写真、所属とともに削除し、作成画面が再び記録しないようにアドレスを非表示にします
openemail contacts set-audiences <email> --audience-ids <a,b>連絡先が所属するオーディエンスを、このリストのとおりにします。既定のオーディエンスは常に残ります
openemail contacts list-people「連絡先」ページに表示される全員です。保存された連絡先と、threads:read があればメールに登場したすべてのアドレスを、スレッド数とともに表示します。--sort、--q、--email、--blocked で絞り込めます
openemail contacts save <email>アドレスを保存するか、送信から記録されたものを残すか、削除したものを復活させます。アドレスがどの状態でもエラーにはなりません
openemail contacts delete-many <emails...>1 回の呼び出しで 1 から 200 件のアドレスを削除して非表示にします
openemail contacts set-photo <email> <data>ファイルから、または - で stdin から写真をアップロードします。5 MB までの PNG、JPEG、WebP、GIF です
openemail contacts remove-photo <email>写真を外し、保存された画像を削除します
openemail contacts block <email>アドレスをワークスペースのブロックリストに入れ、そこからのメールを拒否します。プラスタグは取り除かれます
openemail contacts unblock <email>そのアドレスをブロックしているブロックリストのルールを、ドメイン全体のルールも含めてすべて外します
openemail contacts list-threads <email>そのアドレスが書いた、またはそのアドレス宛てに書かれたスレッドを、すべてのフォルダーから表示します。--q でその中を検索します
openemail contacts activity <email>ある期間にそのアドレスから受信したメールと、そのアドレスに送信したメールです。期間は --minutes で指定しない限り 90 日で、返信待ちのスレッドと、双方向の返信時間の中央値も含みます

オーディエンス

名前付きの連絡先リストで、1 つのワークスペースに最大 100 個作れます。アドレスはオーディエンスに加わる前に連絡先になっている必要があります。例外は import-contacts で、新しいアドレスを処理しながら保存します。

コマンド機能
openemail audiences listオーディエンスの 1 ページです。既定のオーディエンスが最初で、残りは新しい順に、それぞれ contactCount 付きで表示します
openemail audiences growthある期間にオーディエンスがどう増えたかです。期間は --days か --minutes で指定しない限り 30 日で、区間ごとの参加数と配信停止数、そして合計を示します
openemail audiences get <id>1 つのオーディエンスを、最新の contactCount とともに
openemail audiences create --name <value>空のオーディエンスを作成します。--description は任意です。名前は重複してもかまいません
openemail audiences update <id>--name や --description を変更します。所属する連絡先には影響しません
openemail audiences delete <id>オーディエンスを削除し、その連絡先は残します。既定のオーディエンスは削除できません
openemail audiences empty <id>すべての連絡先を外し、オーディエンス自体は ID、名前、説明とともに残します
openemail audiences list-contacts <id>オーディエンス内の連絡先の 1 ページです。それぞれいつ参加したか、配信停止したかを示します。--sort、--q、--source、--statuses で絞り込めます
openemail audiences add-contact <id> --email <value>既存の連絡先を 1 件オーディエンスに入れます。すでにいる人を追加しても何も変わりません
openemail audiences remove-contact <id> <email>連絡先を 1 件外します。オーディエンスにいない連絡先は 404 になります
openemail audiences add-contacts <id> --emails <a,b>既存の連絡先を最大 200 件入れ、連絡先でないアドレスは missing で報告します
openemail audiences remove-contacts <id> --emails <a,b>最大 200 件の連絡先を外し、含まれていなかったものを報告します
openemail audiences import-contacts <id> --contacts <json|@file|->最大 500 行の { email, name } をインポートし、まだ連絡先でないアドレスを保存します

一斉配信

最大 10 個のオーディエンスの全員に 1 つのメッセージを送ります。一人ひとりに別々のコピーとして、差し込みフィールドを埋め、配信停止リンクを付けて送られます。各コピーは通常のメールで、それぞれ独自の msg_ の ID、イベント、Webhook を持ちます。

コマンド機能
openemail broadcasts preview --audience-ids <a,b>これらのオーディエンスへの一斉配信が誰に届き、配信停止や抑止のために誰をスキップするかを数えます。何も送信しません
openemail broadcasts send --audience-ids <a,b> --from <value>--subject と --html または --text、あるいは保存済みの --template を使って、今すぐ、または --scheduled-at の日時に送信します
openemail broadcasts list一斉配信を新しい順に 1 ページ、リアルタイムの件数とともに表示します。--audience-id でそのオーディエンスに送ったものに絞ります
openemail broadcasts get <id>1 つの一斉配信を、ステータスとリアルタイムの件数とともに表示します。送信中にポーリングするためのコマンドです
openemail broadcasts stats <id>配信、バウンス、開封、クリック、配信停止の合計と、--grain の区間ごとの系列です。区間は指定しない限り 1 時間です
openemail broadcasts list-recipients <id>各コピーが誰に送られ、どうなったかです。--filter で bounced や not_opened などの 1 つのグループに絞ります
openemail broadcasts get-recipient <id> <email-id>1 人分のコピーを、その人が受け取ったとおりの件名、HTML、テキストで表示します
openemail broadcasts cancel <id>予約済み、キュー待ち、または送信中の一斉配信を止めます。送信済みのコピーは取り消せません

抑止リスト

このワークスペースが送信しないアドレスです。発生時に記録されるハードバウンスと苦情、そして手動で追加したアドレスが入ります。これらのアドレスへの送信は、何かが送り出される前にその受信者について拒否されます。

コマンド機能
openemail suppressions listリストの 1 ページを新しい順に表示します。--reason で bounce、complaint、manual に絞り、--q で検索します
openemail suppressions get <id>1 行分です。アドレス、理由、バウンスや苦情に含まれていた詳細、そして削除できるかどうか
openemail suppressions add --email <value>アドレスへの送信を止めます。すでにあるアドレスを追加すると、既存の行が返ります
openemail suppressions remove <id>そのアドレスへのメールを再び許可します。ハードバウンスは削除できません

抑止とブロックリストは別のリストです。suppressions add はアドレスへの送信を止め、contacts block はそのアドレスから届くメールを拒否します。

スコープ

ほとんどのコマンドには、その名前空間の読み取りまたは書き込みのスコープが必要です。別のものを読んだり変更したりするため、別のスコープが必要なコマンドもいくつかあります:

スコープコマンド
contacts:readcontacts list、get、list-people
contacts:writecontacts create、update、delete、save、delete-many、set-photo、remove-photo、そして audiences:write に加えて audiences import-contacts
audiences:readaudiences list、growth、get、list-contacts、そして broadcasts preview。そのため送信できないキーでも件数を表示できます
audiences:writeその他すべての audiences コマンドと contacts set-audiences。contacts create --audience-ids には contacts:write に加えてこれが必要です
threads:readcontacts list-threads と activity、そして list-people でメールに登場したアドレス
settings:readsuppressions list と get
settings:writesuppressions add と remove、そして contacts block と unblock
emails:readbroadcasts list、get、stats、list-recipients、get-recipient
emails:sendaudiences:read も必要な broadcasts send と、broadcasts cancel
  • 特定のアドレスやドメインに限定されたキーも、他のすべてのキーと同じアドレス帳を読み書きします。見えるのは自分が持つアドレスやドメインから送られた一斉配信だけで、list-people からは保存された連絡先だけを得ます。また、contacts list-threads、activity、block、unblock、そして suppressions add と remove では 422 capability_unsupported で拒否されます。
  • 一部のアドレスにしか届かないメンバーのブラウザでのサインインは、すべての contacts、audiences、broadcasts コマンドで 422 capability_unsupported で拒否されます。suppressions add は、ワークスペースのオーナー以外によるブラウザでのサインインを拒否します。

実例

ファイルからオーディエンスを作り、そこへの一斉配信が誰に届くかを数えます。import-contacts はまだ連絡先でないアドレスを保存し、もう一度実行しても何も二重に作成や追加はされません。

contacts.json
[  { "email": "[email protected]", "name": "Ada Lovelace" },  { "email": "[email protected]", "name": "Grace Hopper" },  { "email": "[email protected]" }]
オーディエンスを作って数える
AUDIENCE=$(openemail audiences create --name 'Product updates' --json | jq -r .id)openemail audiences import-contacts "$AUDIENCE" --contacts @contacts.jsonopenemail broadcasts preview --audience-ids "$AUDIENCE"

リクエストを表示するだけで何も送らない --dry-run で一斉配信を確認してから送信します。一斉配信はすぐに作成され、バックグラウンドで送信されるので、get をポーリングして進み具合を追ってください。この本文には {{unsubscribeUrl}} が置かれていないため、各コピーに 1 行の配信停止フッターが付きます。

broadcast.json
{  "audienceIds": ["aud_4c1b8e2a7d9f05c36b4e8a71"],  "from": "Acme <[email protected]>",  "subject": "{{firstName|Hello}}, the September release is out",  "html": "<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>",  "scheduledAt": "2026-10-01T09:00:00Z"}
一斉配信を確認してから送信
openemail broadcasts send --data @broadcast.json --dry-runBROADCAST=$(openemail broadcasts send --data @broadcast.json --yes --json | jq -r .id)openemail broadcasts get "$BROADCAST"openemail broadcasts stats "$BROADCAST" --grain day

一斉配信が誰に届かなかったかを確認します。--ndjson は 1 行に 1 人の受信者を、--all --json はすべてのページを含む 1 つのドキュメントを出力します。

届かなかった相手
openemail broadcasts list-recipients brd_5a8c1e3f7b2d94a06c8e1f3b --filter bounced --ndjson | jq -r .emailopenemail broadcasts list-recipients brd_5a8c1e3f7b2d94a06c8e1f3b --filter not_opened --all --json | jq ".items | length"openemail suppressions list --reason bounce --all --max 50

あるオーディエンスの購読中のメンバーを別のオーディエンスにコピーします。jq がストリームを add-contacts が受け取る本文に変換し、--data - がそれを stdin から読みます。--max 200 で、1 回の呼び出しが受け付ける 200 件のアドレスに収めます。

購読中のメンバーをコピー
openemail audiences list-contacts aud_9f2c4b7e1a0d63d84c5f2e7b --statuses subscribed --max 200 --ndjson \  | jq -s '{ emails: map(.email) }' \  | openemail audiences add-contacts aud_1c4e7a9b2d0f36e85a7c1b4d --data -

作成画面が記録した、あるドメインの連絡先をすべて削除します。delete-many は 1 回の呼び出しで最大 200 件のアドレスを受け付けるので、長いリストは xargs -n 200 で分割します。元に戻せないので、先に --dry-run で各バッチを確認してください。

ドメイン単位で削除
openemail contacts list --source auto --all --ndjson \  | jq -r 'select(.email | endswith("@old-vendor.example")) | .email' > leaving.txtxargs -n 200 openemail contacts delete-many --dry-run < leaving.txtxargs -n 200 openemail contacts delete-many --yes < leaving.txt

アドレスへの送信を止め、別のアドレスを再び許可し、送信者をブロックします。removable は、suppressions remove がどの行を受け付けるかを示します。

抑止、許可、ブロック
openemail suppressions add --email [email protected]openemail suppressions list --q [email protected] --json | jq -r '.items[] | select(.removable) | .id'openemail suppressions remove 7b1e2c3d-4f5a-4b6c-8d7e-9f0a1b2c3d4e --yesopenemail contacts block [email protected]

確認と確認コード

次のコマンドは、ターミナルで実行する前に確認を求めます:

名前空間確認を求めるもの
contactsdelete、delete-many、remove-photo、unblock
audiencesdelete、empty、remove-contact、remove-contacts
broadcastssend と cancel
suppressionsremove
  • --yes は代わりに確認します。--json や --no-input を付けたとき、CI の中、またはターミナルがないときの無人実行では、確認を求めるはずのコマンドは Refusing to run unattended. Pass --yes to confirm. と終了コード 2 で停止します。
  • --dry-run はコマンドが送るはずのリクエストを表示し、確認も変更もせずに終了コード 0 で終了します。
  • ブラウザでサインインしている場合、audiences delete は、Web アプリと同じようにまず確認コードを求めます。--yes でこれを省略することはできず、無人実行ではコマンドは終了コード 4 で停止します。事前に openemail verify を実行するか、確認コードを求められることのない API キーを使ってください。
  • audiences empty は確認コードを求めないので、--yes を渡す前に ID を確認してください。

ページング

一覧を返すコマンドはどれも 1 ページを読みます。続きがある場合は、表示されたカーソルを同じ絞り込み条件とともに --cursor に渡すか、すべて読みます:

  • --all はすべてのページを読んで項目をストリームします。ターミナルでは表として、パイプしたときや --ndjson を付けたときは 1 行に 1 つの JSON オブジェクトとして出力します。
  • --max <n> はその件数で停止し、--all を含意します。
  • --json は、--all の場合も含めて 1 つの { items, hasMore, nextCursor } ドキュメントを出力します。
  • 形式が正しくないカーソルや古いカーソルは 400 invalid_cursor になります。カーソルなしで最初からやり直してください。
コマンドページサイズ
openemail contacts list1 から 200。--limit で指定しない限り 50
openemail contacts list-people1 から 100。--limit で指定しない限り 25
openemail contacts list-threads1 から 100。--limit で指定しない限り 25
openemail audiences list1 から 100。--limit で指定しない限り 25
openemail audiences list-contacts1 から 200。--limit で指定しない限り 50
openemail broadcasts list1 から 100。--limit で指定しない限り 25
openemail broadcasts list-recipients1 から 200。--limit で指定しない限り 50
openemail suppressions list1 から 100。--limit で指定しない限り 25

知っておきたいこと

  • contacts create はすでにアドレス帳にあるアドレスを 409 contact_exists で拒否するので、再試行によって誰かが編集した名前が上書きされることはありません。contacts save は決して拒否せず、アドレスがどの状態でも、保存、維持、または復活させます。
  • contacts delete は、メールに登場しただけのアドレスも受け付け、その人を list-people から外します。メールは残ります。元に戻すことはできず、アドレスを再び保存すると、名前もメモもなく、既定のオーディエンス以外には所属しない連絡先として始まります。
  • アドレスは連絡先の識別子なので、contacts update では変更できません。連絡先を移すには delete と create を行います。
  • contacts set-photo は画像をファイルから、または - で stdin から読みます。image/jpeg のように --content-type を渡してください。付けないと画像が application/octet-stream として送られることがあり、サーバーはそれを 422 invalid_image で拒否します。
  • broadcasts send --scheduled-at は、2026-10-01T09:00:00Z のような ISO 8601 の日時か、PT2H や P1D のような ISO 8601 の期間を、365 日後まで受け付けます。send --at が受け付ける 2h のような短い遅延は、ここでは拒否されます。
  • 差し込みフィールドは --subject、--html、--text で使えます。{{firstName}}、{{lastName}}、{{name}}、{{email}}、{{unsubscribeUrl}} で、{{firstName|there}} のように縦棒の後に代替値を書けます。{{unsubscribeUrl}} を置いていない本文には 1 行の配信停止フッターが付きます。テンプレートはそのまま送られるので、リンクはテンプレートに入れてください。
  • 一斉配信は、何かが書き込まれる前にプランの月間送信数と照合され、各コピーは 1 回の送信として数えられます。枠で賄えない一斉配信は 429 send_quota_exceeded で拒否され、何も残りません。
  • スクリプトがその手順をもう一度実行する可能性がある場合は、broadcasts send に独自の --idempotency-key を渡してください。同じキーでは、新しく送る代わりに、そのキーで作成された一斉配信が返ります。
  • 一斉配信から配信停止した連絡先は、unsubscribedAt が設定された状態でオーディエンスに残り、そのオーディエンスへの以降の一斉配信ではスキップされます。audiences list-contacts --statuses unsubscribed でそれらを一覧表示できます。
  • ハードバウンスは抑止リストに残ります。suppressions remove はそれを 409 suppression_not_removable で拒否し、各行の removable で事前にわかります。

受信トレイを、
あなたの思いどおりに。

企業、AI、エージェント、個人利用のためのメールインフラ。スケール、プライバシー、コントロールのために設計。メールが最初から備えているべきだったすべて。

OpenEmail

企業、AI、エージェント、個人利用のためのメールインフラ。スケール、プライバシー、コントロールのために設計。メールが最初から備えているべきだったすべて。

© 2026 OpenEmail. 無断転載を禁じます。