ドメイン
`domains.list`、`list_all`、`iterate`、`get`、`update`。
すべてのメソッド
from openemail import openemail domains = openemail.domains.list()domain = openemail.domains.get('b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f') print(domain['receiving']['verified'], domain['sending']['status'])for address in domain['addresses']: print(address['address'], address['enabled']) updated = openemail.domains.update(domain['id'], {'trackingHost': 'links.acme.com'})tracking = updated['tracking']print(tracking['status']) if tracking['record'] is not None: print(tracking['record']['name'], tracking['record']['value']) openemail.domains.update(domain['id'], {'trackingHost': None})受信と送信は独立した 2 つの事実であり、2 つのオブジェクトとして返されます。receiving.verified は、そのドメインの MX がメールをここへ運び、所有権チャレンジが公開されていることを意味します。sending は送信側の署名チェックを報告します。status は verified、pending、failed、no_identity、unknown のいずれかで、canSend は今そのドメインからの送信が受け付けられるかどうかを示します。1 日より古い否定的な判定は拒否ではなく不明として扱われるので、status ではなく canSend で分岐してください。
update は、ドメイン独自のトラッキングドメイン(links.acme.com のようなサブドメイン)を設定・再チェック・削除し、get と同じ DomainDetailResource を返します。tracking はすべての読み取りでその状態を報告します。チェックが通るまで tracking.status は pending で、トラッキングリンクと開封ピクセルは既定の OpenEmail ホストを使い続けます。チェックが通ると active になり、そのドメインからの新しいメールは両方にトラッキングドメインを使います。
get はドメイン上のアドレスも一覧します。関連する呼び出しは addresses.list() で、そちらはこのキーが From ヘッダーに入れてよいアドレスだけという、より狭い一覧です。
app_host は独立した名前空間です。get、set、verify、delete は、ワークスペースの WebアプリのURL を読み取り・変更します(これらのドメインのいずれか、またはワークスペースが管理するほかのドメイン上にある mailbox.acme.com のようなサブドメインで、利用者はそこでワークスペースのブランドのもとサインインします)。set は公開する DNSレコードを返し、delete は OAuth アプリに確認コードを求めます。ワークスペースにすでにあるホストを置き換える set も同様です。
branding はそのブランドを設定します。get はマーク、ロゴ、ダークモード用ロゴ、ログイン画面の写真へのリンク、2 つのフォント、ログインページの背景を読み取ります。update はフォントと背景を変更し、upload_image(variant, data, content_type=...) は 4 つの画像のいずれかをアップロードし、remove_image(variant) は 1 つを削除します。WebアプリのURL と、有料プランではワークスペースのために送られるメールにブランドを付けるのはロゴです。
パラメーター: domains.get
idstr必須- `domains.list` から得られる id で、ドメインが追加されたときに発行された UUID です。ホスト名ではないので `get('example.com')` では何も見つかりません。検索は id だけでなくキー自身の接続にもスコープされるので、他のワークスペースのドメインは 403 ではなく 404 になります。
パラメーター: domains.update
idstr必須- `get` が受け取るのと同じドメイン id です。必要なスコープは `domains:write` です。
patch['trackingHost']str | None- そのドメインのサブドメインで、最大 512 文字。たとえば `links.acme.com` です。トリムして小文字化され、先頭の `https://` や `http://`、パス、末尾のドットは取り除かれます。新しい値は同じ呼び出しの中で検証・保存・チェックされます。ドメインがすでに持っている値を渡すと、直前のチェックから 30 秒未満でない限り、チェックが再実行されます。`None` または空文字列でトラッキングドメインを削除します。
拒否されたホストは、param に trackingHost を名指しする OpenEmailApiError を送出します。ドメイン外の名前など使用できない名前は 422 invalid_tracking_host、receiving.verified が false でドメインの _openemail-challenge TXT レコードがまだ公開されていない状態での新しいホストは 409 domain_not_verified、他のドメインがすでに使っている名前や、別の OpenEmail サーバーが管理しているトラッキングドメインは 409 tracking_host_in_use です。特定のアドレスに限定されたキーは 422 capability_unsupported になります。トラッキングドメインはドメイン上のすべてのアドレスに適用されるからです。
レスポンス: DomainDetailResource
objectLiteral['domain']- 常に文字列 `domain` です。`list` の行でもこのオブジェクトでも同じです。
idstr- ドメインの UUID。行の存続中は不変で、他のドメイン系呼び出しが受け取る唯一のハンドルです。
domainstr- 小文字のホスト名だけ、つまり `example.com` です。製品全体で一意でドメインごとに所有者は 1 つなので、2 つのワークスペースが同じドメインを主張することはできません。
receiving.verifiedbool- DNS 上で、そのドメインの MX がメールをここへ運ぶホストを指していることが確認され、行がチャレンジトークンを持つ場合は対応する `_openemail-challenge` TXT レコードも確認できた時点で true になります。当社が受信するすべてのドメインが同じホスト名を公開するため MX だけでは何も証明できず、だからトークンが存在し、だからこのフラグが、受信配送がメールを受け入れる前に確認する関門になっています。
receiving.verifiedAtstr | None- 検証が通った時刻、ISO-8601。通っていなければ null です。`verified` はまさにこのカラムから導出されるので、両者が食い違うことはありません。
receiving.catchAllbool- 任意のローカルパートを受け入れるかどうか。これが規定になって以降に追加されたドメインでは既定でオンです。オフの場合、そのドメイン上に登録されたアドレスだけが受け入れられ、残りは SMTP の時点で拒否されるので、送信者は沈黙ではなくバウンスを受け取ります。
receiving.lastCheckedAtstr | None- このドメインについて DNS に最後に問い合わせた時刻。null は一度も見ていないという意味で、1 分前にドメインを追加した人にとっては失敗とまったく読み方が違います。このエンドポイントは保存された結果を報告するだけで、自分でチェックを実行することはありません。
receiving.errorstr | None- 直近のチェックが通らなかった理由を、所有者が行動に移せる言葉で表したもの。`No MX records yet. DNS changes can take a few minutes to spread.` が典型例です。通れば null になります。導出ではなく保存された値なので、リロードしても定期再チェックでも同じことを言います。
sending.statusLiteral['verified', 'pending', 'failed', 'no_identity', 'unknown']- 直近のチェックが見た送信側の署名状態。このリクエストで探りにいくのではなく保存済みのチェックから読むので、`sending.checkedAt` がその古さを示します。
sending.canSendbool- このドメインからの送信が今受け付けられるかどうか。1 日より古い否定的な判定は拒否ではなく不明として扱われるので、`status` が `pending` でもこれが true になることがあります。送信前にはこれで分岐してください。false は、このドメインからの `emails.send` が 409 `domain_not_sendable` で拒否されるという意味です。
sending.checkedAtstr | None- 署名状態が最後に確認された時刻、ISO-8601 です。null は一度も確認していないという意味で、失敗とはまったく読み方が違います。
sending.errorstr | None- 直近の署名の失敗を言葉で表したもの。通過すれば null になります。
sending.notestr- `sending.status` によって選ばれる 5 つの文のうち 1 つで、その状態がドメイン所有者にとって何を意味するかを行動に移せる言葉で述べます。人が読むための文章です。分岐はこれではなく `sending.canSend` で行ってください。
trackingDomainTracking- ドメイン独自のトラッキングドメイン。`list` の行でもこのオブジェクトでも同じで、`update` が変更する対象です。
tracking.hoststr | None- `links.acme.com` のようなトラッキングドメイン。設定されていなければ null です。
tracking.statusLiteral['none', 'pending', 'active', 'failed']- `none` はトラッキングドメインが設定されていないこと、`pending` は一度もチェックを通っていないこと、`active` は新しいメールがそれを使っていること、`failed` は以前は通っていたが使われなくなったことを意味します。稼働中のホストは、3 回連続でチェックに失敗するか、最後に成功したチェックから 2 時間以上経つと使われなくなります。
tracking.activebool- `status` が `active` のときだけ true になります。すなわち、そのドメインからの新しいメールのトラッキングリンクと開封ピクセルがそのホストを使っている状態です。
tracking.targetstr- CNAME レコードが指す先のアドレスで、このトラッキングドメイン専用に用意されます。`host` が null の間、および新しいホスト用のアドレスを準備している間は空文字列です。
tracking.recordDomainTrackingRecord | None- 公開すべきレコード。名前は `host`、値は `target` です。トラッキングドメインがない場合、および新しいホスト用のアドレスを準備中の場合は null になります。
tracking.checkedAtstr | None- ホストが最後にチェックされた日時(ISO-8601)。最初のチェックまでは null です。
tracking.verifiedAtstr | None- 最後にチェックに通った日時(ISO-8601)。一度も通っていないホストでは null です。
tracking.errorstr | None- 直近のチェックで判明したことを、ドメイン所有者が対処できる言葉で示します。直近のチェックに通った場合、またはまだ一度も実行されていない場合は null です。1〜2 回チェックに失敗したホストはまだ `active` のままで、その理由がここに入ります。
addresseslist[DomainDetailResourceAddressesItem]- ドメイン上のすべてのアドレス行で、`get` が `list` の行に対して追加する部分です。catch-all のもとで配送処理自身が書いた行も含まれ、それらは catch-all をオフにした瞬間に受け付けられなくなるので、この配列は受信できるものの一覧ではありません。
addresses[].addressstr- 完全なアドレス。保存されたローカルパートとホスト名から再構成し小文字化するので、上の `domain` から乖離することなく常に一致します。
addresses[].enabledbool- false はアドレスを無効にします。無効なアドレスは catch-all がオンでも拒否されます。どちらの行も一覧には載るので、この配列を有効なアドレスの集合として読むのではなく、これで絞り込んでください。
createdAtstr- ドメインの行が追加された時刻、ISO-8601。検証された時刻ではありません。そちらは `receiving.verifiedAt` で、これが入っていてもあちらが null のことがあります。
リファレンス
domains.list()完全なリファレンスdomains.list_all()完全なリファレンスdomains.iterate()完全なリファレンスdomains.get()完全なリファレンスdomains.update()完全なリファレンスapp_host.get()完全なリファレンスapp_host.set()完全なリファレンスapp_host.verify()完全なリファレンスapp_host.delete()完全なリファレンスbranding.get()完全なリファレンスbranding.update()完全なリファレンスbranding.upload_image()完全なリファレンスbranding.remove_image()完全なリファレンス