スレッド、下書き、ラベル
threads、drafts、labels の名前空間のすべてのコマンドと、それらが inbox、read、archive などのメールコマンドの下でどう使われているか。
概要
inbox、read、archive、label add などのメールコマンドは人のために書かれています。複数のスレッド ID を一度に受け取り、出力を整形し、ラベル ID を見えないようにします。それぞれがこのページのコマンドを実行します。これらはスレッド、下書き、ラベルの SDK メソッドで、メソッド 1 つにつきコマンドが 1 つあるので、threads.listAttachments は openemail threads list-attachments になります。
メールコマンドでは扱えないものが必要なときにこれらを使います。API が返すとおりのスレッド、メッセージのファイル、下書き、そしてラベルの作成、名前の変更、色の変更、削除です。
- 複数形の名前に加えて
openemail threadとopenemail draftも使えます。openemail labelsには単数形がありません。openemail labelはスレッドにラベルを付けるメールコマンドです。 - 動詞にはいつもの別名が使えます。
listにはls、getにはshowとview、createにはnewとadd、updateにはedit、deleteにはrm、del、removeです。 - すべてのフラグは
openemail threads list --helpのようにopenemail <namespace> <verb> --helpで確認できます。
スレッド
メールボックス内の会話です。CAHk7pQ2x9LmZ4 のようなスレッド ID は、threads list、openemail inbox、openemail search から得られます。
| コマンド | 機能 |
|---|---|
| openemail threads list | フォルダー内のスレッドを新しい順に 1 ページ一覧表示します。各行は ID だけです。--folder、--query、--label-ids、--sort、--date-from、--date-to、--from-contacts で絞り込みと並べ替えができます |
| openemail threads get <id> | スレッドを、そのすべてのメッセージを古い順に、ラベルと未読状態とともに読みます |
| openemail threads update <id> | --read でスレッドを既読に、--no-read で未読にし、--add-label-ids と --remove-label-ids でラベルを付けたり外したりします。それぞれ最大 50 個です |
| openemail threads trash <id> | スレッドを受信トレイ、迷惑メール、スヌーズ、アーカイブから一度にゴミ箱へ移します。確認を求めます |
| openemail threads snooze <id> <wake-at> | 2026-10-01T09:00:00Z のような将来の日時までスレッドを隠します。もう一度スヌーズすると再表示の時刻が置き換わります |
| openemail threads unsnooze <id> | スヌーズしたスレッドを今すぐ受信トレイに戻し、再表示の時刻を消去します |
| openemail threads list-attachments <id> <message-id> | 1 通のメッセージの添付ファイルを一覧表示します。それぞれのバイト列は content に base64 でインラインで含まれます |
--folderの既定はinboxで、ラベル ID として照合されます。そのためsent、archive、spam、trash、draft、snoozed、starred、unreadが使え、binはtrashとして扱われ、USER_RECEIPTSのようなユーザーラベルの ID も使えます。何にも一致しないフォルダーは、エラーではなく空のページを返します。--queryはアプリの検索構文を受け付け、in:anywhereですべてのフォルダーを検索します。--label-idsはさらに絞り込みます。スレッドはフォルダーと渡したすべての ID を持っている必要があるためです。--date-fromと--date-toは各スレッドの最新のメッセージを見て判断し、両端を含みます。threads getは未送信の下書き返信もisDraft: trueの印付きでメッセージに含め、下書きの ID も開けます。threads updateには--read、--no-read、または追加か削除するラベルが必要です。削除は追加より先に適用されます。存在しないラベルを指す ID はlabel_not_foundで拒否され、スレッドは何も変わらないので、先にラベルを作成してください。TRASH、SNOOZED、DRAFTはlabel_not_directly_settableで拒否されます。threads trashとthreads snoozeを使ってください。threads trashは何も削除せず、スレッドはthreads getで読める状態のままですが、スレッドをゴミ箱から戻すコマンドはありません。スヌーズ中のスレッドをゴミ箱に移すと、再表示も取り消されます。threads snoozeは<wake-at>をそのまま送るので、Zかオフセット付きの将来の ISO 8601 の日時を指定してください。どちらもない日時はサーバーのタイムゾーンで解釈されます。3hのような遅延は無効として拒否されます。遅延を指定するならopenemail snooze --until 3hを使います。スレッドは 1 時間ごとの処理で再表示されるため最大 1 時間ほど遅れることがあり、必ず受信トレイに戻ります。threads list-attachmentsはすべてのファイルを丸ごと 1 つのレスポンスで返します。メッセージ ID はthreads getのmessagesから取ってください。保存されたバイト列が見つからない場合contentは空文字列になるので、デコードする前に長さを確認してください。
下書き
メールボックスに保存された未送信のメッセージです。下書きの ID は draft- で始まります。
| コマンド | 機能 |
|---|---|
| openemail drafts list | 下書きを最近保存した順に 1 ページ一覧表示します。各行は ID だけで、--query で検索できます |
| openemail drafts get <id> | 下書きの受信者、件名、本文、送信者、返信先のスレッド、添付ファイルの名前を読みます |
| openemail drafts create | --to、--cc、--bcc、--subject、--html、--text、--from、--thread-id から新しい下書きを保存します。どれも省略可能です |
| openemail drafts update <id> | 保存済みの下書きのフィールドを変更します。省略したフィールドは値がそのまま残ります |
| openemail drafts delete <id> | 下書きを完全に削除します。ゴミ箱には入りません。確認を求めます |
drafts list --queryは件名、送信者、本文の冒頭を検索し、下書きの外は探しません。older_than:30dなどの日付演算子は下書きが最後に保存された日時を見ます。to:、cc:、bcc:は下書きでは何にも一致しません。- 下書きは
DRAFTラベルの付いたスレッドとして保存されるので、threads getで開くことができ、openemail inbox draftで一覧表示できます。drafts get、update、deleteは通常のスレッド ID を 404 で拒否します。 - 何も付けない
openemail drafts createは空の下書きを保存します。確認されるのは長さだけです。件名は最大 998 文字、--htmlと--textはそれぞれ最大 1,000,000 文字で、両方を指定すると--htmlが残ります。添付ファイル用のフラグはありません。 drafts updateは送った各フィールドを置き換えます。リストは保存されているものを丸ごと置き換えるので、アドレスを 1 つだけ指定した--toは他のアドレスを外します。また、更新すると下書きの添付ファイルのリストは空になります。--thread-idは下書きの返信先のスレッドを記録しますが、下書き自体はやはり独立したスレッドとして保存されます。drafts createをもう一度実行すると 2 つ目の下書きが保存されます。冪等キーを受け付けないためです。表示名にカンマが含まれていると、壊れた 2 つの受信者に分かれてしまうので、カンマは入れないでください。openemail send --draft <id> --to <address>は下書きを送信します。本文は下書きから取られ、件名も--subjectを渡さない限り下書きから取られますが、受信者は指定したものになります。本文、--template、--translateとは併用できません。
ラベル
スレッドに付けられるラベルです。ユーザーラベルの ID は、USER_ の後に、作成時の名前を大文字にして連続する空白をそれぞれ _ に置き換えたものが続くので、Big Clients は USER_BIG_CLIENTS になります。
| コマンド | 機能 |
|---|---|
| openemail labels list | ワークスペースのユーザーラベルを名前順に一覧表示します。それぞれ色、threadCount、createdAt、updatedAt 付きです |
| openemail labels list-colors | アプリが提供するパレットを一覧表示します。14 の単色と 7 つのグラデーションです。色として渡すのは value です |
| openemail labels get <id> | ユーザーラベルを 1 つ読みます。ID は大文字と小文字を区別して照合されます |
| openemail labels create --name <value> | ユーザーラベルを作成します。--color-background-color で色を付けます |
| openemail labels update <id> | ラベルの名前や色を変更します。ID は変わらず、そのラベルが付いたスレッドもそのままです |
| openemail labels delete <id> | ラベルを削除し、そのラベルが付いていたすべてのスレッドから外します。確認を求めます |
- ID は名前を変えても変わらないので、名前ではなく ID を保存してください。
INBOX、STARRED、UNREADなどのシステムラベルは一覧に表示されず、変更も削除もできませんが、threads updateでは使えます。それらに対するlabels getは 404 になります。- ワークスペースに作れるユーザーラベルは最大 50 個です。大文字と小文字を区別せずに比較して、他のラベルがすでに使っている名前は
label_name_takenで拒否されます。 - 色は
#3B82F6のような 16 進数の値か、gradient:sunsetのようなグラデーションのトークンです。--label-colorは色全体を JSON で受け取り、--label-color nullで色を消去します。 - ラベルはワークスペースに属するので、名前や色の変更、削除はワークスペースの全員に反映されます。
labels deleteは元に戻せません。同じ名前でラベルを作り直すと同じ ID になりますが、スレッドにラベルは戻りません。labels getのthreadCountで、いくつの会話からラベルが外れるかがわかります。
メールコマンドがそれらをどう使うか
| メールコマンド | 実行するもの |
|---|---|
| inbox [folder] | threads list で 1 ページ分を取得し、各スレッドに対して threads get を 6 件ずつ実行 |
| search <query...> | threads list --query の後、各スレッドに対して threads get |
| read <thread-id> | threads get の後、--no-mark-read を渡さない限り threads update --read |
| reply <thread-id> | 受信者、件名、送信元アドレスを得るために threads get、その後スレッドへの emails send |
| archive <thread-id...> | threads update --add-label-ids ARCHIVE --remove-label-ids INBOX |
| unarchive <thread-id...> | threads update --add-label-ids INBOX --remove-label-ids ARCHIVE |
| star, unstar <thread-id...> | STARRED を追加または削除する threads update |
| mark read, unread <thread-id...> | threads update --read、または --no-read |
| trash <thread-id...> | threads trash |
| snooze <thread-id...> --until <when> | threads snooze。3h のような遅延は先に日時に変換されます |
| unsnooze <thread-id...> | threads unsnooze |
| label add, remove <thread-id...> | threads update --add-label-ids、または --remove-label-ids |
| send --draft <id> | emails send --draft-id |
- メールコマンドは複数のスレッド ID を受け取ってそれぞれについて報告し、
--jsonを付けると{ results, succeeded, failed }を出力します。このページのコマンドは ID を 1 つ受け取り、API が返すものを出力します。 openemail inboxは、最後に書いた人と件名を表示するために、一覧にするすべてのスレッドを読みます。threads listはページごとに 1 回リクエストし、ID だけを出力します。パイプラインにはそれで十分です。openemail readは HTML のメッセージをテキストに変換し、スレッドを既読にします。threads getは API が返すとおりにスレッドを出力し、何も変更しません。
例
スレッドの既読化、アーカイブ、ラベル付けを 1 回のリクエストで行います。mark read、archive、label add では 3 回になります:
openemail threads update CAHk7pQ2x9LmZ4 --read --add-label-ids ARCHIVE,USER_RECEIPTS --remove-label-ids INBOX --jsonラベルを作り、一致するすべてのスレッドをそのラベルで整理します。パイプすると、--all は 1 行に 1 つの JSON オブジェクトを出力します:
openemail labels create --name Receipts --color-background-color gradient:meadowopenemail threads list --query "in:anywhere subject:receipt newer_than:1y" --all | jq -r .id | xargs openemail label add --label USER_RECEIPTSメッセージからファイルを 1 つ保存します。メッセージ ID は threads get の messages にあります:
openemail threads get CAHk7pQ2x9LmZ4 --json | jq -r ".messages[].id"openemail threads list-attachments CAHk7pQ2x9LmZ4 message_4c1b257a --json | jq -r '.[] | select(.filename == "invoice.pdf") | .content' | base64 --decode > invoice.pdf下書きを書き、変更し、読み返してから送信します:
DRAFT=$(openemail drafts create --to [email protected] --subject "Engine notes for Thursday" --html "<p>Agenda below.</p>" --json | jq -r .id)openemail drafts update "$DRAFT" --to [email protected],[email protected]openemail drafts get "$DRAFT"openemail send --draft "$DRAFT" --from [email protected] --to [email protected],[email protected]30 日間誰も保存していない下書きを片付けます。ドライランは各 DELETE を送らずに表示し、--yes が確認に答えます:
openemail drafts list --query older_than:30d --all | jq -r .id > stale.txtxargs -n 1 openemail drafts delete --dry-run < stale.txtxargs -n 1 openemail drafts delete --yes < stale.txtパレットからグラデーションを選び、変更をプレビューしてから適用し、後で色を外します:
openemail labels list-colors --json | jq -r '.[] | select(.kind == "gradient") | .value'openemail labels update USER_RECEIPTS --name "Receipts 2026" --color-background-color gradient:aurora --dry-runopenemail labels update USER_RECEIPTS --name "Receipts 2026" --color-background-color gradient:auroraopenemail labels update USER_RECEIPTS --label-color nullスコープと確認コード
| スコープ | コマンド |
|---|---|
| threads:read | threads list、get、list-attachments |
| threads:write | threads update、trash、snooze、unsnooze |
| drafts:read | drafts list と get |
| drafts:write | drafts create、update、delete |
| labels:read | labels list、list-colors、get |
| labels:write | labels create、update、delete |
スコープが足りない場合は終了コード 4 で停止します。これらのコマンドはどれも、ブラウザでのサインインでも API キーでも確認コードを求めません。
一部のアドレスに限定されたサインインやキーには、それらのアドレスに届いたスレッドしか見えず、それ以外のスレッドは存在しないかのように 404 になります。ラベルはワークスペースに属するので、すべてのラベルは見えますが、threadCount が数えるのは見える会話だけです。
ページ、確認、ドライラン
threads list、drafts list、labels listは 1 ページを読みます。--limitで指定しない限り 25 件で、最大 100 件です。--cursorは、ページが表示したカーソルから続けます。スレッドのカーソルは発行されたときの並び順を保つので、同じ絞り込み条件と一緒に渡してください。--allはすべてのページを読み、--max <n>はその件数で停止します。パイプしたときや--ndjsonを付けたときは 1 行に 1 つの JSON オブジェクトを、--jsonを付けたときは 1 つの{ items, hasMore, nextCursor }ドキュメントを出力します。- 結果的に最後のページだった場合でも
hasMoreが true になることがあり、その場合は次の呼び出しで項目が返りません。ページをめくっている間に新しいメールが届いたスレッドはカーソルより前に移り、以降のページでは返されません。ページをめくっている間に保存された下書きも同様です。 threads trash、drafts delete、labels deleteは確認を求めます。--jsonや--no-inputを付けたとき、またはターミナルがないときの無人実行では、--yesを渡さない限り終了コード2で停止し、何も変更しません。--dry-runはコマンドが送るはずのリクエストを認証情報を伏せて表示し、送信も確認もせずに終了コード0で終了します。--jsonを付けると{ dryRun, request }を出力します。
JSON の本文とフィールドの消去
--data は本文全体を JSON で受け取ります。インラインでも、@path でファイルからでも、- で stdin からでも渡せ、併せて渡したフラグは対応するキーを上書きします。
フラグの値が空だと使い方のエラーになるので、空の値で消去するフィールドは代わりに --data で渡します。--label-color null はラベルの色を消去します。
openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"from":""}'openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"threadId":""}'openemail drafts update draft-5f0c2a9e-8b1d-4e7a-a3c6-2d9f41b7e0c8 --data '{"to":[]}'openemail drafts create --data @draft.json --subject "Overrides the file"1 つ目は送信者なしで下書きを保存し、2 つ目は返信先のスレッドから切り離し、3 つ目は受信者を消去します。
すべてのフラグ
openemail threads --helpopenemail threads list --helpopenemail drafts create --help --jsonopenemail <namespace> <verb> --help は、各引数とフラグをその型とともに表示し、呼び出しに必要なスコープ、メソッドとパス、返す内容、API リファレンスの注記も示します。--json を付けると、同じヘルプをデータとして出力します。