コンテンツにスキップ

ドメインの追加と検証

hello@acme.com から送信するには、DNS レコードを公開して acme.com を所有していることを証明します。検証により、DKIM 署名(受信側がそのメールが確かにあなたのものだと判断できるようにする仕組み)と、カスタム Return-Path(SPF と DMARC がご自身のドメインとアラインメントするようにする仕組み)が設定されます。

  1. ドメインを追加する

    add-domain.ts
    import { SpacePost } from "@spacepost/node";
    const spacepost = new SpacePost(process.env.SPACEPOST_API_KEY);
    const { data: domain, error } = await spacepost.domains.create({ name: "acme.com" });
    if (error) throw new Error(`${error.name}: ${error.message}`);
    console.log(domain.id, domain.status); // "not_started" or "pending"
    for (const r of domain.records ?? []) {
    console.log(`${r.type.padEnd(5)} ${r.name} -> ${r.value}${r.priority ? ` (priority ${r.priority})` : ""}`);
    }

    ダッシュボードや spacepost domains add acme.com でも追加できます。

  2. DNS レコードを作成する

    レスポンスには、records 配列と recommended_records 配列(DMARC)が含まれます。

    Response (abridged)
    {
    "object": "domain",
    "id": "0192e1c4-0000-7000-8000-000000000001",
    "name": "acme.com",
    "status": "not_started",
    "region": "eu-central-1",
    "open_tracking": false,
    "click_tracking": false,
    "records": [
    { "record": "DKIM", "name": "a1b2c3d4e5f6._domainkey", "type": "CNAME", "ttl": "Auto", "status": "not_started", "value": "a1b2c3d4e5f6.dkim.amazonses.com" },
    { "record": "DKIM", "name": "g7h8i9j0k1l2._domainkey", "type": "CNAME", "ttl": "Auto", "status": "not_started", "value": "g7h8i9j0k1l2.dkim.amazonses.com" },
    { "record": "DKIM", "name": "m3n4o5p6q7r8._domainkey", "type": "CNAME", "ttl": "Auto", "status": "not_started", "value": "m3n4o5p6q7r8.dkim.amazonses.com" },
    { "record": "SPF", "name": "send", "type": "MX", "ttl": "Auto", "status": "not_started", "value": "feedback-smtp.eu-central-1.amazonses.com", "priority": 10 },
    { "record": "SPF", "name": "send", "type": "TXT", "ttl": "Auto", "status": "not_started", "value": "\"v=spf1 include:amazonses.com ~all\"" }
    ],
    "recommended_records": [
    { "record": "DMARC", "name": "_dmarc", "type": "TXT", "ttl": "Auto", "status": "not_started", "value": "\"v=DMARC1; p=none;\"" }
    ]
    }

    これらを DNS プロバイダーに追加します。下のレコードの解説と、プロバイダー別ガイドをご覧ください。

  3. 検証する

    DNS の変更が反映されるまで、数分(まれに数時間)かかることがあります。SpacePost は保留中のドメインを自動的に再確認しますが、いつでも手動で確認を実行できます。

    verify-domain.ts
    import { SpacePost } from "@spacepost/node";
    const spacepost = new SpacePost(process.env.SPACEPOST_API_KEY);
    const id = "0192e1c4-0000-7000-8000-000000000001";
    const { error } = await spacepost.domains.verify(id); // asks SpacePost to re-check DNS now
    if (error) throw new Error(error.message);
    const { data: domain } = await spacepost.domains.get(id);
    console.log(domain?.status); // "verified" once DKIM is confirmed

API が返すレコード名は、ドメインからの相対名です(send、_dmarc、a1b2c3d4e5f6._domainkey)。DNS プロバイダーによっては完全な名前(send.acme.com)が必要です。どちらが必要かはプロバイダー別ガイドに記載しています。

レコード タイプ 名前 値 目的
DKIM(3 つ) CNAME <token>._domainkey <token>.dkim.amazonses.com Amazon SES がローテーションしてくれる公開鍵を公開します(「Easy DKIM」)。受信側はこれを使って、各メッセージがご自身のドメインで署名され、改ざんされていないことを検証します。必須: 検証は 3 つすべてに依存します。
Return-Path MX send feedback-smtp.<region>.amazonses.com、優先度 10 send.acme.com 宛てのバウンスと苦情の通知を受信します。下の TXT と合わせて、カスタム MAIL FROM ドメインを構成します。
Return-Path TXT send v=spf1 include:amazonses.com ~all Return-Path サブドメインの SPF。エンベロープ送信者がご自身のドメイン上にあるため、SPF が From アドレスとアラインメントします。DMARC にはこれが必要です。
DMARC(推奨) TXT _dmarc v=DMARC1; p=none; 認証に失敗したメールをどう扱うかを受信側に伝えます。Gmail と Yahoo は大量送信者にこれを要求しています。DMARC をご覧ください。
ステータス 意味
not_started ドメインは追加済みですが、DNS はまだ確認されていません。
pending SpacePost が DNS を確認中です。
verified DKIM が確認されました。このドメインから送信できます。
temporary_failure 一時的に参照に失敗しました。自動的に再試行されます。
failed 72 時間以内に DNS が見つからなかったか、レコードが間違っています。レコードを修正して、もう一度 verify を呼び出してください。

DKIM が通った時点で、ドメインは verified になります。Return-Path のレコードだけが欠けている場合でもメールは送信されますが、SPF のアラインメントが Amazon のドメインにフォールバックし、DMARC のアラインメントが弱まります。最高の到達率のために、必ず修正してください。

records 内の各レコードには同じ値の status があるため、どれが欠けているかを正確に確認できます。

acme.com が検証済みなら、任意のサブドメイン(news@mail.acme.com)から送信できます。マーケティングメールには、サブドメイン自体(mail.acme.com)を検証するほうが望ましい運用です。トランザクションメール用のドメインと評判を分けられるためです。

プラン ドメイン数
Free 3
Pro 10
Scale 1,000

別のチームがすでに登録しているドメインを追加すると、422 validation_error(“Domain already registered”)が返ります。

うまくいかない場合は、トラブルシューティングをご覧ください。