DreamHostのSPF・DKIM・DMARC設定。
DreamHostはWebホスティング会社です。そのため、ここでいう「ドメイン認証」とは、DreamHost自身のメールサーバーから送信するメールボックスとWebサイトのメールを認証することを指し、別個のメール配信サービス(ESP)向けウィザードはありません。DNSをDreamHostでホストしているドメインなら、ほとんどの作業はパネルが自動で行います。DreamHostの送信IPとMailChannelsリレーを許可するSPFレコードを公開し、「dreamhost」セレクターでDKIM鍵を生成するので、DreamHostのSMTPから送信するすべてのメールに利用者のドメインとして署名されます。DreamHostが決して作成しない唯一のレコードがDMARCで、これは自分で追加します。そして、ほぼ全員がつまずく注意点があります。SPFレコードを手動で編集した瞬間に、DreamHostは管理していたレコードを通知なく削除します。そのため、置き換えるレコードにはDreamHostの2つのincludeを手作業で含める必要があります。
DreamHostを認証すべき理由
DreamHostでSPF、DKIM、DMARCを正しく設定できるかどうかが、メールが受信トレイに届くかを左右します。2024年2月以降、GmailとYahooは、すべての大量送信者(1日あたり約5,000通以上)に対し、SPF、DKIM、DMARCにアライメントが一致した状態で成功することを義務付けています。Microsoftも2025年に、Outlook/Hotmail宛ての大量メールに同じ要件の適用を始めました。DreamHostは、「サービス」別のページの中では珍しいケースです。利用者が自社のメールボックスから送信するからです。エンベロープ送信者が自社ドメインなのでSPFのアライメントが一致し、DreamHostが利用者のドメインとしてDKIM署名を行うのでDKIMも一致します。正しく設定したDreamHostのドメインは、両方のメカニズムでDMARCに成功します。転送にも強い、堅牢な構成です。ただし、DreamHost特有の次の2点で、この構成は気づかないうちに崩れます。認証済みSMTPではなくPHPのmail()/sendmailで送信するWebサイトのスクリプトにはDKIM署名が付かないこと、そしてSPFレコードを編集するとDreamHostの管理レコードが削除されることです。この2つを解消すれば、築いた送信者レピュテーションは、認証されないメールとして流出せず、自社ドメインに蓄積されます。
DreamHostにおけるSPFの実情
DreamHostは正真正銘の「include」型サービスですが、そのincludeは実際には2つのincludeとmxで構成され、それらがルートドメインのSPFレコード全体になります。DNSをDreamHostでホストしているドメインには、パネルがv=spf1 mx include:netblocks.dreamhost.com include:relay.mailchannels.net -allを自動で公開します。netblocks.dreamhost.comにはDreamHost自身の送信IP範囲が含まれています。relay.mailchannels.netが入っているのは、DreamHostが送信メールをMailChannels(共有の送信リレー)経由で配送するためです。どちらも必須で、一方でも欠けると一部のメールがSPFでhard failになります。利用者が自社のメールボックスから送信するため、SMTPのエンベロープ送信者は自社ドメインのアドレスになり、ここではSPFのアライメントが組織ドメインと実際に一致します(Return-Pathをサービス側が持つMailchimpやSendGridとは異なります)。つまずきやすいのは次の動作です。このレコードが管理されるのは、手を加えない間だけです。カスタムのSPFのTXTレコードを追加または編集すると、DreamHostは自動生成のレコードを削除します。そのため、置き換えるレコードにはinclude:netblocks.dreamhost.comとinclude:relay.mailchannels.netの両方(追加するサードパーティのincludeがあればそれも)を、1つのv=spf1レコードの中に含める必要があります。標準の末尾は-all(hard fail)で厳格です。正規の送信元はすべて記載しておかないと、そのまま拒否されます。また、ドメインにSPFのTXTレコードを2つ公開しないでください。SPFレコードが2つあると、それ自体がPermErrorになります。
2つの設定方法
DNSをDreamHostでホスト(自動)
- DreamHostがSPFレコードを自動で公開します(mx + netblocks.dreamhost.com + relay.mailchannels.net、末尾は-all)
- DreamHostがdreamhost._domainkeyのDKIMレコードを自動生成し、SMTPのメールすべてに署名します
- SPFとDKIMについて貼り付けるものはありません。自分で追加するのはDMARCレコードだけです
- 注意点:SPFレコードを編集すると管理レコードが削除されるので、両方のincludeを手作業で追加し直します
DNSを別の場所でホスト(Cloudflare、レジストラ):手動
- DreamHostは管理していないゾーンにはレコードを公開できないため、何も自動では表示されません
- v=spf1 mx include:netblocks.dreamhost.com include:relay.mailchannels.net -allをDNSホストに自分で追加します
- dreamhost._domainkeyのDKIMのTXT値をDreamHostのパネルからDNSホストにコピーします(Cloudflareの場合はDNS-only)
- _dmarcのTXTレコードもそこに追加します。いずれも自動では作成されません
設定手順
- 1
DNSのホスト先を確認
panel.dreamhost.comにログインし、Websites → Manage Websites(古いパネルではDomains → Manage Domains)を開きます。ドメインを探し、縦に3つ並んだドットのボタンをクリックしてDNS Settingsを選びます。DNSをDreamHostでホストしている場合、SPFとDKIMはおそらくすでに公開されています。ネームサーバーがCloudflareやレジストラを指している場合、DreamHostは自動で公開できないので、そのホストですべてのレコードを手動で追加します。
- 2
管理されたSPFレコードを確認
DNS Settingsで、SPFのTXTレコードの値がv=spf1 mx include:netblocks.dreamhost.com include:relay.mailchannels.net -allで、Nameが空欄(ルートドメイン)になっていることを確認します。DreamHostからのみ送信するなら、そのままにしてください。「整理」しようとしないでください。
- 3
別の送信元を追加する場合は重複させず1つにまとめる
編集するとDreamHostの管理レコードが削除されるため、DreamHostの2つのincludeを残して新しいincludeを追加したSPFのTXTレコードを1つ作り直します(例:v=spf1 mx include:netblocks.dreamhost.com include:relay.mailchannels.net include:_spf.google.com -all)。2つ目のSPFレコードは決して追加しないでください(PermErrorになります)。
- 4
DKIMが有効であることを確認
DreamHostは、ホストしているドメインのdreamhost._domainkeyのTXTレコードを自動生成し、認証済みSMTPのメールすべてに署名します。DNS Settingsで、Nameに_domainkeyを含むTXTレコード(セレクターはdreamhost)を確認してください。DNSが外部にある場合は、そのTXT値をDNSホストにコピーして、DKIMが解決されるようにします。
- 5
Webサイトのメールを認証済みSMTPで送信
PHPのmail()/sendmailを使う問い合わせフォームやスクリプトは、DreamHost IPから送信されるのでSPFには成功しますが、DKIM署名は付きません。WordPressや各アプリを、メールボックスの認証情報を使ってsmtp.dreamhost.com経由で送信するよう設定してください(SMTPプラグインで設定できます)。これでメールが署名され、DMARCのアライメントも一致します。
- 6
DMARCレコードを追加
DreamHostはDMARCを作成しません。DNS SettingsでAdd Recordをクリックし、Nameに_dmarc、TypeにTXT、Valueにv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comを設定して保存します。p=noneは監視のみのため、アライメントを確認している間は何も影響しません。
- 7
テストメールを送信してヘッダーを確認
DreamHostのメールボックスから自分のGmailへメールを送り、開いて⋮ → Show originalを選びます。SPF: PASS(自社ドメイン)、DKIM: PASS(d=yourdomain.com、セレクターはdreamhost)、DMARC: PASSを確認します。DKIMがない場合、ほぼ間違いなくSMTPではなく「PHP mail()」で送信されています。
- 8
DMARCをポリシー適用へ引き上げる
1~2週間、問題のないruaレポートで正規の送信元がすべてアライメントの一致した状態で成功していることを確認したら、ポリシーをp=noneからp=quarantine、さらにp=rejectへと引き上げます。DreamHostはSPFとDKIMの両方でアライメントが一致するので、通常はすぐにp=rejectまで到達できます。
追加するレコード
正確な値はDreamHostのセットアップウィザードで生成されます。以下は、DNSホストに追加するレコードの形式を示したものです。
| タイプ | ホスト | 値 |
|---|---|---|
| TXT | @ | v=spf1 mx include:netblocks.dreamhost.com include:relay.mailchannels.net -allDreamHostが管理するルートドメインのSPFレコードです。ルートドメインではName欄を空欄のままにします(@やドメインを入力しないでください)。編集するとDreamHostの自動レコードが削除されるため、置き換えるレコードには両方のincludeを残す必要があります。 |
| TXT | dreamhost._domainkey | v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ…(auto-generated public key)DreamHostでホストするメールについては、DreamHostが自動で作成します。セレクターは常にdreamhostです。例です。実際の鍵はドメインごとに生成され、DNS Settingsで確認できます。 |
| TXT | _dmarc | v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comこのレコードは自分で追加します。DreamHostは決して作成しません。DMARCレコードは1つのドメインにつき1つで、p=noneから始めます。 |
ルートドメインのSPF(v=spf1)のTXTレコードは1つだけにし、すべての送信元をこの1行にまとめてください。SPFレコードが2つあると、それ自体がエラーになります。
DNSルックアップの10回制限
SPFのDNSルックアップは10回までに厳格に制限されており、超えるとpermerrorを返して、どの受信側でも検証されなくなります。DreamHostの設定がこの上限のうち何回を消費するかは、次のとおりです。
DreamHostは10回のルックアップのうち3回を消費します。ip4:とip6:のメカニズムはルックアップを消費しません。
DKIM
DreamHostのDKIMは、DreamHostのメールを使うドメインでは自動です。DreamHostがRSA鍵を生成し、公開鍵をdreamhost._domainkey.yourdomain.comにTXTレコードとして公開します。セレクターは常に「dreamhost」で、値はv=DKIM1; k=rsa; p=<public key>です。DreamHostの認証済みSMTPメールサーバー(smtp.dreamhost.com)から送信されるすべてのメールは対応する秘密鍵で署名されるため、DKIMのアライメントは自社ドメインと一致し、通常は自分で作成するものはありません。実際に機能するかどうかを左右する、DreamHost特有の注意点が2つあります。第一に、署名されるのはDreamHostの認証済みSMTPサーバーから送信するメールだけです。PHPの「mail()」関数やローカルのsendmailバイナリで送るWebサイトのメール(SMTPプラグインなしのWordPress問い合わせフォーム、cronスクリプト、PHPメーラー)は、署名なしでサーバーを離れます。これらのメールはnetblocks.dreamhost.com内のDreamHost IPから送信されるのでSPFには成功しますが、DKIM署名は付きません。メールを送信するアプリは、実在のメールボックスの認証情報を使い、smtp.dreamhost.comで認証するよう設定してください。第二に、DKIMが自動で公開されるのは、DNSをDreamHostでホストしている場合だけです。ネームサーバーがCloudflareやレジストラを指している場合、DreamHostは何も公開しません。DreamHostのDNS管理画面からdreamhost._domainkeyのTXT値をコピーし、実際のDNSホストに追加してください(Cloudflareではグレーのクラウド、DNS-only)。そうしないとDKIMは解決されません。
DMARC
DMARCは、DreamHostが作成しない唯一のレコードで、カスタムDNSレコードとして自分で追加します。DreamHostのパネルでドメインのDNS Settingsを開き、Add Recordをクリックします。Nameに_dmarc、TypeにTXT、Valueにv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comを設定して保存します。p=noneは監視のみで、配信には何も影響しません。その間に受信側から集計レポート(rua)がメールで届くので、DreamHostのメールが自社ドメインとアライメントが一致した状態でSPFとDKIMに成功しているかを確認できます。この点でDreamHostは有利です。SPFはエンベロープ送信者である利用者のドメインで、DKIMはそのドメインのdreamhostセレクターで、両方のメカニズムのアライメントを一致させられるため、正しく設定すれば2つの経路でDMARCに成功します。1~2週間レポートを確認し(24~72時間以内に届き始めます)、正規の送信元がすべて認証に成功していることを確かめたら、p=quarantine、最終的にp=rejectへと段階的に引き上げます。送信者がいくつあっても、_dmarcレコードはドメイン全体で1つだけにしてください。
正しく設定できたか確認する
パネルだけで判断せず、実際のメールで確認してください。DreamHostのメールボックスからGmailアドレスへテストメールを送り、開いて⋮ → Show originalを選びます。SPF: PASS(自社ドメインを表示)、DKIM: PASS(d=yourdomain.com、セレクターはdreamhost)、DMARC: PASSと表示されていれば成功です。DKIMがない場合、そのメールはほぼ確実に認証済みSMTPではなくPHPのmail()/sendmailで送信されています。dig TXT dreamhost._domainkey.yourdomain.comとdig TXT _dmarc.yourdomain.comで生のレコードをスポットチェックでき、dig TXT yourdomain.comでSPFレコードに両方のincludeが残っていることも確認できます。その後、Qualisendのドメイン診断でドメインをチェックし、すべてのレコードが解決され、SPFレコードが10回の上限内に収まっていることを確認します。集計レポートが届き始めたら、DMARCレポート解析にレポートをドロップします。DreamHost(とそのMailChannelsリレー)が、アライメントが一致し認証に成功している送信元として表示されるはずです。
よくある注意点
- DNS設定
SPFレコードを編集すると、DreamHostの管理レコードが削除されます。DreamHostで最大の注意点です。カスタムのSPFのTXTレコードを保存した瞬間に自動生成のレコードが削除されるので、置き換えるレコードにはinclude:netblocks.dreamhost.comとinclude:relay.mailchannels.netの両方を含める必要があります。そうしないと、一部のメールが気づかないうちにSPFで失敗し始めます。
- 適用範囲
relay.mailchannels.netは省略できません。DreamHostは送信メールをMailChannels経由で送るため、このincludeを省くと、リレーを経由するメールはSPFでhard failになります(レコードの末尾が-allのため)。
- 適用範囲
PHPのmail()/sendmailで送るWebサイトのメールにはDKIM署名が付きません。署名されるのは認証済みSMTP(smtp.dreamhost.com)で送信するメールだけです。SMTPプラグインのないWordPressフォームやPHPメーラーはSPFに成功してもDKIMには成功しないため、DKIMのアライメントは一致しません。
- 適用範囲
標準の-allはhard failであり、softfailではありません。DreamHostのレコードは記載し忘れた送信元を拒否するので、このレコードに頼る前に正規のサービスをすべて追加するか、テスト中は~allに緩めてください。
- DNS設定
自動レコードが存在するのは、DNSをDreamHostでホストしている場合だけです。ネームサーバーがCloudflareやレジストラを指している場合、DreamHostは何も公開しません。実際のDNSホストで、SPFレコードを追加し、dreamhost._domainkeyのDKIMのTXTレコードをコピーし、DMARCを追加する作業を自分で行う必要があります。
- 認証失敗の原因
SPFレコードを2つ公開しないでください。別のメールサービスを追加するときは、そのメカニズムを1つのv=spf1の行にまとめます。SPFのTXTレコードが別々に2つあるとPermErrorになり、SPFが完全に機能しなくなります。
- 適用範囲
ルートドメインのSPFでは、Name欄を空欄のままにします。DreamHostはルートドメインを空のName欄で表します。@やドメイン名を入力すると二重化され、無効なホストになります。
- 適用範囲
DMARCは自分で設定します。DreamHostはSPFレコードとDKIMレコードを自動で処理しますが、DMARCレコードは決して作成しません。_dmarcレコードがなければ、SPFとDKIMに成功していても、GmailとYahooの大量送信者向けガイドラインを満たせません。
SPFレコードを作成
以下ではDreamHostがあらかじめ選択されています。他に利用している送信プラットフォームを追加し、1つにまとめたレコードを公開してください。
このドメイン自身のサーバー
ドメインが(上記のサービスを経由せず)直接メールを送信する場合は、ドメイン自体を許可します。
その他の送信元・IP
リストにないもの(別のサービスのSPFホストや特定のIPアドレス)を追加します。
接頭辞のinclude:は自動で付加されます。サービスのドキュメントに記載されているホスト名を入力してください。
その他すべての送信元へのポリシー
上記に記載されていないサーバーからのメールを、受信側がどう処理すべきかを指定します(allメカニズム)。
- ルートドメインにTXTレコードとして公開します。ホストは@(ドメインそのもの)、値は上記の文字列全体です。
- SPFレコードは1つのドメインにつき1つだけにします。すべての送信元をこの1行にまとめてください。v=spf1で始まるTXTレコードが2つあると、両方とも無効になります。
- DNSルックアップは10回以内に収めてください。include:、a、mxはそれぞれ1回とカウントされ、includeは内部でさらにルックアップを発生させることがあります。ip4:とip6:はカウントされません。
送信ドメイン認証の設定が済んだら、次は検証済みのクリーンなリストへの配信です。
リストを検証DreamHostのSPFに関するよくある質問
関連記事
ホスティング・Webサイトの他のサービス
すべてのSPFガイド公開したら、ドメイン診断ですべてのレコードが正しく解決されることを確認し、DMARCレポート解析で自社ドメインを名乗って送信している送信元を把握します。作成ツールではすべての送信元を確認できます。ただし、認証は到達率対策の半分にすぎません。送信IPやドメインがブラックリストに掲載されていると、SPFの設定がどれほど適切でも迷惑メールに振り分けられます。そのため、ブラックリスト監視で掲載状況を確認しておくことをおすすめします。
認証の次は、リストをクリーンに保つ
SPF、DKIM、DMARCに成功すれば受信トレイに届き、クリーンなリストならその状態を維持できます。お手持ちのリストも検証してクリーニングできます。100クレジット無料、クレジットカード登録不要で始められます。