検証理由コード
BillionVerify API が返す全 reason コードの完全リファレンス——各コードの意味と対応方法。
すべての検証結果には reason フィールドが含まれており、そのメールアドレスがそのステータスを受けた理由を説明します。このリファレンスを使用して、正確なフィルタリングロジックを構築し、予期しない結果を診断し、送信戦略を最適化してください。
reason の仕組み
reason フィールドは、すべての検証レスポンスで status フィールドと並んで表示されます:
{
"email": "user@example.com",
"status": "valid",
"reason": "smtp_deliverable"
}reason は安定した文字列識別子です——フィルタリングルールや下流の条件付きロジックで直接使用できます。
Valid(有効)
status: "valid" のメールは配信可能と確認されています。
| reason | 説明 |
|---|---|
smtp_deliverable | SMTP RCPT が 250 OK を返した——メールボックスの配信可能を確認。Microsoft 365 DBEB モードが配信を確認した場合、または catch-all ドメインが特定のアドレスを追加で確認した場合にも使用されます。 |
Invalid(無効)
status: "invalid" のメールはリストから削除してください——配信は不可能です。
| reason | 説明 |
|---|---|
invalid_syntax | メールアドレスが構文解析に失敗——ローカル部分、ドメインの形式が不正または @ が欠如。 |
no_mx_records | ドメインに MX レコードがない(NXDOMAIN または MX ルックアップ結果が空)。 |
spf_reject_all | ドメインに MX レコードがなく、-all を含む SPF レコードがある——ドメインはすべての受信メールを明示的に拒否。 |
mailbox_not_found | SMTP 550/5xx がリモートサーバーにメールボックスが存在しないことを確認。 |
host_not_found | MX ホスト名が応答しなかった——ホストに到達不能または存在しない。 |
Unknown(不明)
status: "unknown" のメールは決定的に検証できませんでした。一部は一時的なもの(再試行可能)で、その他は構造的な制限を表します。
| reason | 再試行可能 | 説明 |
|---|---|---|
smtp_unverifiable | いいえ | プロバイダーが自動化された SMTP 検証をブロックしている(Apple iCloud、Microsoft コンシューマー、Proton、Tuta)。結果はドメインレベルのヒューリスティックに基づく。 |
smtp_blocked | いいえ | リモート SMTP サーバーが接続を明示的にブロックまたはブラックリストに登録した。 |
smtp_eof_blocked | はい | MX がバナーを送信する前に接続を閉じた——通常は IP レート制限または fail2ban ルール。 |
smtp_timeout | はい | SMTP 操作がタイムアウトした(コンテキストデッドラインまたはキャンセル)。 |
smtp_connection_failed | いいえ | 汎用 SMTP 接続失敗——より具体的なクラスが一致しなかった。 |
smtp_rate_limited | はい | リモート SMTP サーバーがレート制限レスポンスを返した(421、450、451 またはメッセージ制限超過)。 |
smtp_greylisted | はい | 汎用グレーリストレスポンスを検出——遅延後に再試行。 |
mimecast_greylist | はい | Mimecast 固有のグレーリスト / 451 一時的失敗。 |
proofpoint_ad_lookup | はい | Proofpoint AD 非同期ルックアップが進行中(受信者検証中の 421 4.1.1 一時的失敗)。 |
policy_temp_fail | はい | リモートポリシー適用による汎用 4xx 一時的失敗。 |
google_rate_limit | はい | Google MX がレート制限または一時的拒否レスポンスを返した。 |
google_dmarc_misalignment | いいえ | ドメインの DMARC 設定が不整合——Google が DMARC ポリシーに基づいて拒否。 |
m365_ip_rep_block | はい | Microsoft 365 が IP レピュテーションにより接続を拒否(4.7.650 / 4.7.651 コード)。 |
mailbox_full | いいえ | メールボックスは存在するがクォータを超えている(SMTP 452 または満杯レスポンス)。 |
mailbox_disabled | いいえ | メールボックスは存在するが無効化または停止されている。 |
dns_timeout | はい | DNS または MX ルックアップがタイムアウトした——一時的なリゾルバーの問題。 |
dns_lookup_error | はい | DNS ルックアップが NXDOMAIN 以外のエラーで失敗した(SERVFAIL、UDP タイムアウト、またはリゾルバーエラー)。 |
yahoo_api_verified | いいえ | Yahoo 登録 API がアドレスの配信可能を確認した(バッチパス)。 |
yahoo_api_not_deliverable | いいえ | Yahoo 登録 API がアドレスの配信不可を確認した(バッチパス)。 |
yahoo_api_error | はい | Yahoo 登録 API 呼び出しが失敗した——一般的エラー。 |
yahoo_api_unavailable | はい | Yahoo 登録 API が利用不可だった(バッチレベルのヘルス失敗)。 |
yahoo_api_eof | はい | Yahoo API が早期 EOF を返した——一時的な TCP/TLS 切断。 |
yahoo_api_unavailable_after_fallback | はい | Yahoo API が失敗し、SMTP フォールバックも失敗した。 |
carrier_blocked | いいえ | 日本のキャリアドメイン(docomo.ne.jp、au.com など)——キャリアポリシーにより SMTP がブロックされている。 |
internal_verifier_error | はい | 未分類の内部検証エラー——一時的な障害。 |
rate_limited | はい | バッチ処理中にレート制限された(ファイルジョブでの smtp_rate_limited のエイリアス)。 |
bucket_default_skip_smtp_unknown | いいえ | アカウントレベルの検証モードが SMTP をスキップするよう設定されている——結果はドメインチェックのみに基づく。 |
Risky(リスクあり)
status: "risky" のメールは中程度の配信リスクがあります。
| reason | 再試行可能 | 説明 |
|---|---|---|
mx_only_verification_semaphore_timeout | はい | SMTP 並行性セマフォがタイムアウトした——MX のみのフォールバックが有効な MX レコードを確認したが、メールボックスを個別に検証できなかった。 |
Catch-all(全受信)
status: "catchall" のメールは、すべてのアドレスのメールを受け入れるドメインに属しています。個別の配信可能性は確認できません。
| reason | 説明 |
|---|---|
catch_all_domain | ドメインが catch-all と確認——ランダム RCPT プローブがメールサーバーに受け入れられた。 |
catch_all_deliverable | Catch-all ドメインで、特定のアドレスの RCPT も 250 OK を返した。 |
catch_all_inferred | キャッシュされた証拠から catch-all ステータスを推定(間接的、ライブプローブではない)。 |
m365_internal_relay | Microsoft 365 ドメインが内部リレーとして設定されている——すべての RCPT が受け入れられるが個別には検証されない。 |
gateway_accept_all | セキュリティゲートウェイ(Mimecast、Proofpoint など)が全受信モード。 |
forwarding_alias | メール転送エイリアスサービス(SimpleLogin、Firefox Relay、Duck.com)。 |
region_consumer_accept_all | すべての受信メールを受け入れることで知られる地域コンシューマードメイン(例:naver.com、daum.net)——SMTP プローブをスキップ。 |
bucket_default_skip_smtp_catchall | アカウントレベルの検証モードが SMTP catch-all 検出をスキップするよう設定されている。 |
Role(役割アドレス)
status: "role" のメールは共有受信箱に属しています(例:info@、support@、noreply@)。これらのアドレスは通常配信可能ですが、エンゲージメント率が低い。
役割アドレスは基礎となる SMTP チェックの reason を継承します——このステータスには専用の reason コードは存在しません。例えば、SMTP を通過した役割アドレスは reason: "smtp_deliverable" を表示します。
Disposable(使い捨て)
status: "disposable" のメールは一時的なメールサービスに属しています。これらを受け入れると、通常は低品質な登録につながります。
| reason | 説明 |
|---|---|
disposable_domain | ドメインが既知の使い捨て/一時的メールプロバイダーとしてリストされている。 |
フィルタリングでの reason の使用
status と reason を組み合わせて正確なリストセグメンテーションを実現できます。例えば、一時的な問題のみが原因で unknown の unknown メールを保持するには:
function isRetryableUnknown(result) {
const retryableReasons = new Set([
'smtp_eof_blocked', 'smtp_timeout', 'smtp_rate_limited',
'smtp_greylisted', 'mimecast_greylist', 'proofpoint_ad_lookup',
'policy_temp_fail', 'google_rate_limit', 'm365_ip_rep_block',
'dns_timeout', 'dns_lookup_error', 'yahoo_api_error',
'yahoo_api_unavailable', 'yahoo_api_eof',
'yahoo_api_unavailable_after_fallback', 'internal_verifier_error',
'rate_limited', 'mx_only_verification_semaphore_timeout',
]);
return result.status === 'unknown' && retryableReasons.has(result.reason);
}