ドメイン
`domains.list`、`list_all`、`iterate`、`get`、`update`。
すべてのメソッド
page = client.domains.listpage.items.each { |row| puts "#{row[:domain]} #{row.dig(:sending, :canSend)}" } domain = client.domains.get("b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f")puts domain.dig(:receiving, :verified), domain.dig(:sending, :status) domain[:addresses].each do |entry| puts "#{entry[:address]} #{entry[:enabled]}"end受信と送信は独立した 2 つの事実であり、2 つの Hash として返されます。receiving.verified は、そのドメインの MX がメールをここへ運び、所有権チャレンジが公開されていることを意味します。sending は送信側の署名チェックを報告します:status は verified、pending、failed、no_identity、unknown のいずれかで、canSend は今そのドメインからの送信が受け付けられるかどうかを示します。1 日より古い否定的な判定は拒否ではなく不明として扱われるので、status ではなく、domain.dig(:sending, :canSend) として読める canSend で分岐してください。
list はアルファベット順に並んだドメインの OpenEmail::Page を 1 つ返し、list_all はすべてを 1 つの Array で返します。iterate はそれらを 1 つずつブロックに yield します。ブロックがなければ Enumerator を返します。
domain_id = "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f" updated = client.domains.update(domain_id, trackingHost: "links.acme.com")puts updated.dig(:tracking, :status), updated.dig(:tracking, :record, :name), updated.dig(:tracking, :record, :value) client.domains.update(domain_id, trackingHost: nil)update は、ドメイン独自のトラッキングドメイン(links.acme.com のようなサブドメイン)を設定・再チェック・削除し、get と同じ Hash を返します。tracking はすべての読み取りでその状態を報告します。チェックが通るまで tracking.status は pending で、トラッキングリンクと開封ピクセルは既定の OpenEmail ホストを使い続けます。チェックが通ると active になり、そのドメインからの新しいメールは両方にトラッキングドメインを使います。
get はドメイン上のアドレスも一覧にします。関連する呼び出しが addresses.list です:このキーが From ヘッダーに入れられるアドレスで、こちらのほうが範囲は狭く、それぞれ canSend の判定を持ちます。これは OpenEmail::AddressBookPage を返し、アドレスを items ではなく addresses に、domains と unrestricted と並べて保持します。その list_all は OpenEmail::AddressBook を 1 つ返します。
app_host は独立した名前空間で、client.app_host です。get、set、verify、delete は、ワークスペースの WebアプリのURL を読み取り・変更します。これは、これらのドメインのいずれか、またはワークスペースが管理するほかのドメイン上にある mailbox.acme.com のようなサブドメインで、ワークスペースの人々はそこでワークスペースのブランドのもとサインインします。set は公開する DNS レコードを record に、ワークスペース外のドメインではさらに ownershipRecord に入れて返します。delete と、アドレスを置き換える set は、OAuth アプリに確認コードを求めます:確認コードを得るまで、呼び出しは step_up_required? が true の 403 を送出します。
branding はそのブランドを設定します。get はマーク、ロゴ、ダークモード用ロゴ、ログイン画面の写真へのリンク、2 つのフォント、ログインページの背景を読み取ります。update はフォントと背景を変更し、upload_image(variant, data, content_type: nil) は 4 つの画像のいずれかをアップロードし、remove_image(variant) は 1 つを削除します。variant は mark、wordmark、wordmark-dark、login-background のいずれかで、OpenEmail::BRAND_IMAGE_VARIANTS がそれらを定義しています。data はバイナリの String、IO、Pathname のいずれかです。Pathname("logo.svg") のような Pathname、File、Rails のアップロードは種類を持っています。それ以外のバイト列には content_type: が必要で、種類のない画像は 422 invalid_image で拒否されます。WebアプリのURL と、有料プランではワークスペースのために送られるメールにブランドを付けるのはロゴです。
パラメーター: domains.get
idString必須- `domains.list` から得られる id で、ドメインが追加されたときに発行された UUID です。ホスト名ではないので `get("example.com")` では何も見つかりません。検索は id だけでなくキー自身のワークスペースにもスコープされるので、他のワークスペースのドメインは 403 ではなく 404 になり、`OpenEmail::NotFoundError` として送出されます。nil や空の id は、何かが送信される前に ArgumentError を送出します。
パラメーター: domains.update
idString必須- `get` が受け取るのと同じドメイン id です。必要なスコープは `domains:write` です。
trackingHostString or nil- そのドメインのサブドメインで、最大 512 文字。たとえば `links.acme.com` です。前後の空白が取り除かれて小文字化され、先頭の `https://` や `http://`、パス、末尾のドットは取り除かれます。新しい値は同じ呼び出しの中で検証・保存・チェックされます。ドメインがすでに持っている値を渡すと、直前のチェックから 30 秒未満でない限り、チェックが再実行されます。nil または空の String を渡すとトラッキングドメインを削除し、フィールドを省略するとそのままになります。
拒否されたホストは、param に trackingHost を示す OpenEmail::ApiError を送出します:ドメイン外の名前など使用できない名前は 422 invalid_tracking_host、receiving.verified が false でドメインの _openemail-challenge TXT レコードがまだ公開されていない状態での新しいホストは 409 domain_not_verified、他のドメインがすでに使っている名前や、別の OpenEmail サーバーが管理しているトラッキングドメインは 409 tracking_host_in_use です。422 は OpenEmail::ValidationError として、各 409 は OpenEmail::ConflictError として届きます。特定のアドレスに限定されたキーは 422 capability_unsupported になります。トラッキングドメインはドメイン上のすべてのアドレスに適用されるからです。
変更内容はキーワード引数または 1 つの Hash で、そのフィールドは API の camelCase の名前のままです。そのため tracking_host: は書かれたとおりに送られ、422 unknown_parameter で拒否されます。update は catchAll、files.acme.com のようなファイル用ドメインを指定する storageHost、dmarcPolicy も受け取ります。どのフィールドも省略可能で、メソッドリファレンスでそれぞれを説明しています。繰り返してもホストはすでに設定されていて、せいぜい再チェックされるだけなので、gem は update を読み取りと同じようにリトライします。
レスポンス:ドメイン(domains.get)
objectString- 常に文字列 `domain` です。`list` の行でもこのオブジェクトでも同じです。
idString- ドメインの UUID。行の存続中は不変で、他のドメイン系呼び出しが受け取る唯一のハンドルです。
domainString- 小文字のホスト名だけ、つまり `example.com` です。製品全体で一意でドメインごとに所有者は 1 つなので、2 つのワークスペースが同じドメインを主張することはできません。
receiving.verifiedBoolean- DNS 上で、そのドメインの MX がメールをここへ運ぶホストを指していることが確認され、行がチャレンジトークンを持つ場合は対応する `_openemail-challenge` TXT レコードも確認できた時点で true になります。当社が受信するすべてのドメインが同じホスト名を公開するため MX だけでは何も証明できず、だからトークンが存在し、だからこのフラグが、受信配送がメールを受け入れる前に確認する関門になっています。
receiving.verifiedAtString or nil- 検証が通った時刻で、ISO 8601 の String です。通っていない間は nil で、`verified` はまさにこのカラムから導出されるので、両者が食い違うことはありません。
receiving.catchAllBoolean- 任意のローカルパートを受け入れるかどうか。これが規定になって以降に追加されたドメインでは既定でオンです。オフの場合、そのドメイン上に登録されたアドレスだけが受け入れられ、残りは SMTP の時点で拒否されるので、送信者は沈黙ではなくバウンスを受け取ります。
receiving.lastCheckedAtString or nil- このドメインについて最後に DNS に問い合わせた時刻。一度も問い合わせていない場合は nil で、1 分前にドメインを追加した人にとって、これは失敗とはまったく違う意味に読めます。未検証のドメインを読み取ると、直前のチェックから 20 秒以上経っていれば DNS に再び問い合わせるため、`get` のポーリングは検証を待つ方法の 1 つです。`verify` はすぐにチェックします。
receiving.errorString or nil- 直近のチェックが通らなかった理由を、所有者が行動に移せる言葉で表したもの。`No MX records yet. DNS changes can take a few minutes to spread.` が典型例です。チェックが通れば nil になります。導出ではなく保存された値なので、リロードしても定期再チェックでも同じことを言います。
sending.statusString- 直近のチェックが見た送信側の署名状態:`verified`、`pending`、`failed`、`no_identity`、`unknown` のいずれか。保存済みのチェックから読むので、`sending.checkedAt` がその古さを示します。
sending.canSendBoolean- このドメインからの送信が今受け付けられるかどうか。1 日より古い否定的な判定は拒否ではなく不明として扱われるので、`status` が `pending` でもこれが true になることがあります。送信前にはこれで分岐してください。false は、このドメインからの `emails.send` が 409 `domain_not_sendable` で拒否されるという意味です。
sending.checkedAtString or nil- 署名状態が最後に確認された時刻で、ISO 8601 の String です。一度も確認していない場合は nil で、これは失敗とはまったく違う意味に読めます。
sending.errorString or nil- 直近の署名の失敗を言葉で表したもの。通過すれば nil になります。
sending.noteString- `sending.status` によって選ばれる 5 つの文のうち 1 つで、その状態がドメイン所有者にとって何を意味するかを行動に移せる言葉で述べます。人が読むための文章なので、分岐はこれではなく `sending.canSend` で行ってください。
trackingHash- ドメイン独自のトラッキングドメイン。`list` の行でもこのオブジェクトでも同じで、`update` が変更する対象です。
tracking.hostString or nil- `links.acme.com` のようなトラッキングドメイン。設定されていなければ nil です。
tracking.statusString- `none` はトラッキングドメインが設定されていないこと、`pending` は一度もチェックを通っていないこと、`active` は新しいメールがそれを使っていること、`failed` は以前は通っていたが使われなくなったことを意味します。稼働中のホストは、3 回連続でチェックに失敗するか、最後に成功したチェックから 2 時間以上経つと使われなくなります。
tracking.activeBoolean- `status` が `active` のときだけ true になります。すなわち、そのドメインからの新しいメールのトラッキングリンクと開封ピクセルがそのホストを使っている状態です。
tracking.targetString- CNAME レコードが指すアドレスで、このトラッキングドメイン専用に用意されたものです。`host` が nil の間、および新しいホスト用のアドレスを準備中の間は空の String になります。
tracking.recordHash or nil- 公開すべきレコードで、`type`(常に `CNAME`)、`name`、`value` を持つ Hash です。名前は `host`、値は `target` です。トラッキングドメインがない場合、および新しいホスト用のアドレスを準備中の場合は nil になるため、`dig(:tracking, :record, :value)` で安全に読めます。
tracking.checkedAtString or nil- ホストが最後にチェックされた時刻で、ISO 8601 の String です。最初のチェックまでは nil です。
tracking.verifiedAtString or nil- 最後にチェックに通った時刻で、ISO 8601 の String です。一度も通っていないホストでは nil です。
tracking.errorString or nil- 直近のチェックで判明したことを、ドメイン所有者が対処できる言葉で示します。直近のチェックに通った場合、またはまだ一度も実行されていない場合は nil です。1〜2 回チェックに失敗したホストはまだ `active` のままで、その理由がここに入ります。
addressesArray<Hash>- ドメイン上のすべてのアドレス行で、`get` が `list` の行に対して追加する部分です。catch-all のもとで配送処理自身が書いた行も含まれ、それらは catch-all をオフにした瞬間に受け付けられなくなるので、この Array は受信できるものの一覧ではありません。
addresses[].addressString- 完全なアドレス。保存されたローカルパートとホスト名から再構成し小文字化するので、上の `domain` から乖離することなく常に一致します。
addresses[].enabledBoolean- false はアドレスを無効にします。無効なアドレスは catch-all がオンでも拒否されます。どちらの行も一覧には載るので、この Array を有効なアドレスの集合として読むのではなく、これで絞り込んでください。
createdAtString- ドメインの行が追加された時刻で、ISO 8601 の String です。ドメインが検証された時刻ではありません:そちらは `receiving.verifiedAt` で、これが入っていてもあちらが nil のことがあります。