홈으로 돌아가기

SMTPDog 개발자 문서

도메인 인증, SMTP와 Email API, API 키, 웹훅 서명 검증, 문제 해결까지 한눈에 볼 수 있는 연동 가이드입니다.

05 · domains dns

도메인 인증 및 DNS 설정

계정에 생성된 TXT 레코드로 발신 도메인의 소유권을 인증하세요.

1. 추가 전 확인

추가에는 활성 패키지와 사용 가능한 노드가 필요합니다. max_domains는 패키지의 하드 한도이며 기술적 무제한이 아닙니다. 여러 도메인은 현재 패키지 발송 한도를 공유합니다. ASCII FQDN을 사용하고 충돌·한도·노드 오류를 확인한 뒤 다시 요청하세요.

curl -X POST "${SMTPDOG_API_ORIGIN}/domains" \
  -H "Authorization: Bearer ${SMTPDOG_SESSION_TOKEN}" \
  -H "Content-Type: application/json" \
  --data '{"domain_name":"example.com"}'

2. 실제 TXT 레코드 사용

생성 응답 또는 GET /domains/{id}는 type, name, value를 포함한 dns_records를 반환할 수 있습니다. 실제 DKIM selector, 공개키, SPF include 값을 사용하세요. 게시 가능한 가상 TXT는 제공하지 않습니다. DNS 제공업체의 상대 호스트명 설정을 확인하고 기존 SPF를 무조건 덮어쓰거나 여러 개 게시하지 마세요.

필드 / 설정타입 / 상태설명
typestring현재 TXT
namestring반환된 전체 레코드명 사용, 상대 Host 규칙 확인
valuestring반환 DKIM 키·SPF 사용, 예시 데이터 불가
type:  TXT
name:  <use the actual dns_records[].name>
value: <use the actual dns_records[].value>

3. DNS 제공업체에서 레코드 추가하기

발신 도메인마다 전용 DKIM 셀렉터, 공개 키, SPF 레코드가 계정에 발급됩니다. 이를 DNS 제공업체에서 TXT 레코드로 추가한 뒤 콘솔에서 인증을 실행하세요.

  1. STEP 01 · 레코드 받기
    콘솔에서 도메인 추가

    콘솔에서 도메인(또는 하위 도메인)을 추가하면 type, name, value가 담긴 전용 dns_records 목록이 반환됩니다.

  2. STEP 02 · TXT 레코드 추가
    DNS 제공업체에서 생성

    DNS 제공업체에 로그인해 각 레코드를 TXT로 추가하세요. 호스트 입력란이 상대 이름을 요구하는지 확인해야 합니다.

  3. STEP 03 · 인증
    all_passed 확인

    반영될 때까지 기다린 뒤 콘솔에서 인증을 실행하세요. SPF와 DKIM 검사가 모두 통과하면(all_passed가 true) 발송할 수 있습니다.

DNS 제공업체별 설정 방법

호스트 입력란에 루트 도메인이 자동으로 붙는지는 제공업체마다 다릅니다. 사용하는 곳을 선택하세요.

1. 설정 화면으로 가는 길

Cloudflare 대시보드 → 도메인 선택 → DNS → Records → Add record.

2. 호스트(Host / Name) 입력 방법

Name에는 SPF처럼 루트 도메인 레코드라면 @, 하위 도메인이라면 mail 같은 접두사를 입력합니다. DKIM은 상대 부분인 <selector>._domainkey를 입력하세요. 전체 이름을 입력해도 Cloudflare가 정규화합니다.

3. 레코드 유형과 값

Type은 TXT를 선택하고, 콘솔에 표시된 값을 그대로 Content에 붙여 넣으세요. 앞뒤에 공백이 없어야 합니다.

4. TTL과 반영 시간

TTL은 Auto로 두면 됩니다. TXT 레코드는 프록시되지 않습니다. 보통 금방 반영되지만 몇 분 정도 여유를 두세요.

제공업체 콘솔의 화면 구성은 수시로 바뀝니다. 메뉴 이름이 다르더라도 같은 규칙을 따르세요: 상대 호스트, 유형은 TXT, 값은 그대로.

호스트 이름 변환표

제공업체가 루트 도메인을 자동으로 붙인다면, 콘솔이 반환한 전체 이름을 상대 호스트로 바꿔서 입력하세요.

경우콘솔이 반환한 name입력할 호스트비고
루트 도메인 SPFexample.com@@는 루트 도메인을 뜻합니다. 이미 SPF가 있다면 두 번째 레코드를 만들지 말고 합치세요.
하위 도메인 SPFmail.example.commail끝의 .example.com을 빼고 하위 도메인 접두사만 입력합니다.
루트 도메인 DKIM<selector>._domainkey.example.com<selector>._domainkey콘솔이 반환한 selector를 쓰고 루트 도메인 부분은 뺍니다.
하위 도메인 DKIM<selector>._domainkey.mail.example.com<selector>._domainkey.mail하위 도메인 부분(.mail)은 남기고 끝의 .example.com만 뺍니다.

자주 하는 실수

1. 호스트당 SPF는 하나: 같은 호스트에 v=spf1 TXT 레코드를 여러 개 둘 수 없습니다. 다른 메일 서비스의 SPF가 이미 있다면 콘솔이 알려 준 include를 거기에 합치세요.

2. 긴 DKIM 값: DKIM 공개 키는 255자를 넘습니다. 대부분의 제공업체가 자동으로 나누지만, 그렇지 않다면 하나의 TXT 레코드 안에서 255자 이하의 따옴표 문자열 여러 개로 나누세요.

3. 인증 API가 HTTP 200을 반환해도 검사가 실행되었다는 뜻일 뿐입니다. all_passed가 true인지 확인하고, 실패하면 checks[]의 expected_value와 found_values를 비교하세요.

4. 인증 및 결과 확인

POST /domains/{id}/verify에는 본문이 필요 없습니다. HTTP 200이어도 all_passed가 false일 수 있습니다. 각 passed, expected_value, found_values, lookup_error를 확인하고 모든 검사 통과를 확인하세요. DNS 인증이 노드 배포 완료나 지속 모니터링을 보장하지 않습니다.

필드 / 설정타입 / 상태설명
all_passed / statusbool / string전체 통과 및 현재 상태
checks[].namestringdkim / spf
record_name / expected_value / passedstring / bool레코드 기대값 및 통과 결과
found_values / lookup_errorstring[] / string선택, DNS 문제 해결용
curl -X GET "${SMTPDOG_API_ORIGIN}/domains/${SMTPDOG_DOMAIN_ID}" \
  -H "Authorization: Bearer ${SMTPDOG_SESSION_TOKEN}"

curl -X POST "${SMTPDOG_API_ORIGIN}/domains/${SMTPDOG_DOMAIN_ID}/verify" \
  -H "Authorization: Bearer ${SMTPDOG_SESSION_TOKEN}"

5. 문제 해결 및 해제

TXT 불일치는 전체 name/value, DNS 전파, 제공업체 호스트 형식을 확인하세요. DMARC 인증 API는 없습니다. DELETE /domains/{id}는 이력을 남기고 disabled로 설정합니다. 즉시 재등록·계정 이전은 보장하지 않습니다. 부분 생성 실패는 무한 재시도 대신 지원에 문의하세요.