あなたの顧客のドメインからメールを送信
マルチテナント型アプリ(ヘルプデスク、CRM、または顧客に代わってメールを送信するプラットフォーム)を構築していると、最終的に1つの質問にぶつかります。メールはあなたのドメインから送るべきか、それとも彼らのドメインから送るべきか?間違えるとメッセージは550 sender is unacceptableでバウンスします。MailerToGoで機能するモデルをここに示します。
2つのアプローチ
1. プラットフォーム送信者(推奨される開始地点)
自分のドメイン(例:support@yourapp.com)から送信し、顧客のアドレスをReply-Toに入れます。すぐに機能し、顧客のDNS設定は不要で、配信可能性を完全に管理できます。これはZendesk、Intercom、ほとんどのSaaSヘルプデスクがデフォルトで行うことです。
- From:
support@yourapp.com(または テナントごとのsupport@acme.yourapp.com) - Reply-To:
support@customerdomain.com - トレードオフ: 受信者はFrom行に顧客のブランドではなくあなたのブランドを目にします。
2. 顧客ドメイン(より良いブランドと配信可能性)
顧客のドメイン用にDKIMキーをプロビジョニングして、メールを彼らのものとして署名します。これには顧客がDNSレコードを追加する必要がありますが、ブランドの一貫性を提供し、DKIMとDMARCが独自ドメインで揃うと、より優れた配信可能性を実現します。
- From:
support@customerdomain.com(彼らのDKIMキーで署名) - トレードオフ: 送信前に顧客がDNS操作を実行する必要があります。
ほとんどのプラットフォームは両方を提供します。すべてのテナントをプラットフォーム送信者で開始し、準備ができたら顧客が独自ドメインにアップグレードできるようにします。
DKIMプロビジョニングをスキップした場合はどうなるか
これが落とし穴です。アプリがMailerToGoでDKIMキーがプロビジョニングされていない顧客ドメインから送信する場合、2つのうち1つが起こります。メッセージは拒否される(550 sender is unacceptable)か、またはエンベロープ送信者がフォールバックとしてデフォルトドメインに書き直されるです。
どちらも構築する基盤にはなりません。拒否は顧客メールが失われることを意味します。サイレントなエンベロープ書き直しはDMARCアラインメントが静かに壊れることを意味します。このエラーを野生で見かけたことがあります。info@customerdomain.comとして送信し、DKIMがプロビジョニングされていないアプリで、すべてのメッセージが550 sender is unacceptableでバウンスしていました。
フォールバックに依存しないこと。送信者をコードで決定してください。
推奨パターン:送信者を自分で選択する
顧客ごとに、彼らの送信ドメインがMTGで検証されているかどうかを追跡してください。MAIL FROMをそれに応じて選択し、検証されていない場合はプラットフォームドメインにフォールバックします。
# Ruby
PLATFORM_DOMAIN = "yourapp.com"
def sender_for(customer)
if customer.sending_domain_verified?
{ from: "support@#{customer.domain}" } # 彼らのものとして署名
else
{ from: "support@#{PLATFORM_DOMAIN}", # あなたのドメイン
reply_to: customer.support_address } # 返信はまだ彼らに到達
end
end
// Node
const PLATFORM_DOMAIN = "yourapp.com";
function senderFor(customer) {
return customer.sendingDomainVerified
? { from: `support@${customer.domain}` }
: { from: `support@${PLATFORM_DOMAIN}`, replyTo: customer.supportAddress };
}
正しく設定すべきいくつかのこと:
sending_domain_verified?はあなたのアプリが所有するフラグです。顧客のDKIMがMTGで確認されたら設定してください。送信するたびに検証を再チェックしないでください。- プラットフォームが送信したメールには常に
Reply-Toを設定して、返信が顧客に到達するようにしてください。 - プロビジョニングされていることを確認していないドメイン上でFromを構築しないでください。
顧客のドメインをプロビジョニングする
顧客が自分のドメインとしてメール送信したい場合:
- MailerToGoに送信サブドメインを追加してください。
mtg.customerdomain.comのような専用サブドメインをルートドメインではなく使用してください。これは送信レピュテーションを分離し、MTGが構築されたパターンです。なぜMailerToGoはmtg.yourdomainから送信するのかを参照してください。 - 顧客がDNSレコードを公開するようにしてください。 最も簡単なパスは、単一の委譲
NSレコードです。MailerToGoがそのサブドメインのSPF、DKIM、DMARCを管理します。マニュアルパス、SPF、DKIM、DMARC TXTレコードを自分で公開することも、顧客がレコードを所有することを好む場合は同様にサポートされています。送信メール用にサブドメインを使用するを参照してください。 - 確認してからフラグを変更してください。 MTGがドメイン検証を報告したら、その顧客の
sending_domain_verified = trueを設定し、彼らのドメインとして送信を開始してください。
ステップ3が完了するまで、顧客をプラットフォーム送信者に保ってください。新しいテナントは初日から送信できます。ダウンタイムなしで独自ドメインにアップグレードできます。
TL;DR
- すべてのテナントをプラットフォームドメイン(
support@yourapp.comプラスReply-To)で開始してください。機能します。 - 顧客が、DKIMをプロビジョニング(理想的には委譲
NSレコード経由のmtg.送信サブドメイン上)することで独自ドメインにアップグレードできるようにしてください。 - テナントごとの「ドメイン検証済み」フラグからコードで送信者を選択してください。プロビジョニングされていないドメインから送信して、フォールバックが救ってくれることを望まないでください。それはありません。