BillionVerify LogoBillionVerify

검증 이유 코드

BillionVerify API가 반환하는 모든 reason 코드의 완전한 참조 가이드 — 각 코드의 의미와 처리 방법.

모든 검증 결과에는 이메일이 해당 상태를 받은 이유를 설명하는 reason 필드가 포함됩니다. 이 참조 가이드를 사용하여 정확한 필터링 로직을 구축하고, 예상치 못한 결과를 진단하며, 발송 전략을 최적화하세요.

reason의 작동 방식

reason 필드는 모든 검증 응답에서 status 필드와 함께 나타납니다:

{
  "email": "user@example.com",
  "status": "valid",
  "reason": "smtp_deliverable"
}

reason은 안정적인 문자열 식별자입니다 — 필터링 규칙이나 다운스트림 조건부 로직에서 직접 사용할 수 있습니다.

Valid(유효)

status: "valid" 이메일은 전달 가능이 확인되었습니다.

reason설명
smtp_deliverableSMTP 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_foundSMTP 550/5xx가 원격 서버에 메일박스가 존재하지 않음을 확인.
host_not_foundMX 호스트명이 응답하지 않음 — 호스트에 도달할 수 없거나 존재하지 않음.

Unknown(알 수 없음)

status: "unknown" 이메일은 결정적으로 검증할 수 없었습니다. 일부는 일시적이며(재시도 가능), 다른 것들은 구조적 한계를 나타냅니다.

reason재시도 가능설명
smtp_unverifiable아니오제공업체가 자동화된 SMTP 검증을 차단함(Apple iCloud, Microsoft 소비자, Proton, Tuta). 결과는 도메인 수준 휴리스틱에 기반.
smtp_blocked아니오원격 SMTP 서버가 연결을 명시적으로 차단하거나 블랙리스트에 등록.
smtp_eof_blockedMX가 배너를 보내기 전에 연결을 종료함 — 일반적으로 IP 속도 제한기 또는 fail2ban 규칙.
smtp_timeoutSMTP 작업이 시간 초과됨(컨텍스트 데드라인 또는 취소).
smtp_connection_failed아니오일반 SMTP 연결 실패 — 더 구체적인 클래스가 일치하지 않음.
smtp_rate_limited원격 SMTP 서버가 속도 제한 응답을 반환(421, 450, 451 또는 메시지 제한 초과).
smtp_greylisted일반 그레이리스팅 응답 감지 — 지연 후 재시도.
mimecast_greylistMimecast 특정 그레이리스팅 / 451 임시 실패.
proofpoint_ad_lookupProofpoint AD 비동기 조회 진행 중(수신자 검증 중 421 4.1.1 임시 실패).
policy_temp_fail원격 정책 적용으로 인한 일반 4xx 임시 실패.
google_rate_limitGoogle MX가 속도 제한 또는 임시 거부 응답을 반환.
google_dmarc_misalignment아니오도메인 DMARC 구성이 정렬되지 않음 — Google이 DMARC 정책에 따라 거부.
m365_ip_rep_blockMicrosoft 365가 IP 평판으로 인해 연결을 거부(4.7.650 / 4.7.651 코드).
mailbox_full아니오메일박스는 존재하지만 할당량 초과(SMTP 452 또는 받은편지함 가득 참 응답).
mailbox_disabled아니오메일박스는 존재하지만 비활성화 또는 비활성화됨.
dns_timeoutDNS 또는 MX 조회 시간 초과 — 일시적인 리졸버 문제.
dns_lookup_errorDNS 조회가 NXDOMAIN 이외의 오류로 실패(SERVFAIL, UDP 시간 초과 또는 리졸버 오류).
yahoo_api_verified아니오Yahoo 등록 API가 주소의 전달 가능성을 확인(배치 경로).
yahoo_api_not_deliverable아니오Yahoo 등록 API가 주소의 전달 불가능을 확인(배치 경로).
yahoo_api_errorYahoo 등록 API 호출 실패 — 일반 오류.
yahoo_api_unavailableYahoo 등록 API를 사용할 수 없음(배치 수준 상태 실패).
yahoo_api_eofYahoo API가 조기 EOF를 반환 — 일시적인 TCP/TLS 끊김.
yahoo_api_unavailable_after_fallbackYahoo 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_timeoutSMTP 동시성 세마포어 시간 초과 — MX 전용 폴백이 유효한 MX 레코드를 확인했지만 메일박스를 개별적으로 검증할 수 없었음.

Catch-all(전체 수신)

status: "catchall" 이메일은 모든 주소에 대해 메일을 수신하는 도메인에 속합니다. 개별 전달 가능성을 확인할 수 없습니다.

reason설명
catch_all_domain도메인이 catch-all로 확인됨 — 무작위 RCPT 프로브가 메일 서버에 의해 수락됨.
catch_all_deliverableCatch-all 도메인이며, 특정 주소의 RCPT도 250 OK를 반환.
catch_all_inferred캐시된 증거에서 catch-all 상태를 추론(간접적, 실시간 프로브 아님).
m365_internal_relayMicrosoft 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 사용하기

statusreason을 결합하여 정확한 목록 세분화를 수행할 수 있습니다. 예를 들어, 일시적인 문제로만 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);
}

On this page