도메인 인증 및 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를 무조건 덮어쓰거나 여러 개 게시하지 마세요.
| 필드 / 설정 | 타입 / 상태 | 설명 |
|---|---|---|
| type | string | 현재 TXT |
| name | string | 반환된 전체 레코드명 사용, 상대 Host 규칙 확인 |
| value | string | 반환 DKIM 키·SPF 사용, 예시 데이터 불가 |
type: TXT
name: <use the actual dns_records[].name>
value: <use the actual dns_records[].value>3. DNS 제공업체에서 레코드 추가하기
발신 도메인마다 전용 DKIM 셀렉터, 공개 키, SPF 레코드가 계정에 발급됩니다. 이를 DNS 제공업체에서 TXT 레코드로 추가한 뒤 콘솔에서 인증을 실행하세요.
- STEP 01 · 레코드 받기콘솔에서 도메인 추가
콘솔에서 도메인(또는 하위 도메인)을 추가하면 type, name, value가 담긴 전용 dns_records 목록이 반환됩니다.
- STEP 02 · TXT 레코드 추가DNS 제공업체에서 생성
DNS 제공업체에 로그인해 각 레코드를 TXT로 추가하세요. 호스트 입력란이 상대 이름을 요구하는지 확인해야 합니다.
- 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 레코드는 프록시되지 않습니다. 보통 금방 반영되지만 몇 분 정도 여유를 두세요.
1. 설정 화면으로 가는 길
Alibaba Cloud 콘솔 → Alibaba Cloud DNS → Public Zone → 내 도메인 → Settings → Add Record.
2. 호스트(Host / Name) 입력 방법
중요: Host에는 상대 이름만 입력합니다. 도메인은 자동으로 붙습니다. example.com이면 @, mail.example.com이면 mail, DKIM은 <selector>._domainkey만 입력하세요.
3. 레코드 유형과 값
Record Type은 TXT를 선택하고 SPF 또는 DKIM 문자열 전체를 Record Value에 붙여 넣으세요.
4. TTL과 반영 시간
라인은 Default로 두고 TTL은 10분(600초) 정도가 적당합니다. 추가한 뒤 몇 분 기다렸다가 인증하세요.
1. 설정 화면으로 가는 길
DNSPod 콘솔 → My Domains → 도메인 열기 → Add Record.
2. 호스트(Host / Name) 입력 방법
Alibaba Cloud와 같은 규칙입니다. 상대 이름만 입력하세요(루트는 @, 하위 도메인이나 DKIM은 해당 접두사). 도메인을 다시 입력하면 example.com.example.com이 되어 인증에 실패합니다.
3. 레코드 유형과 값
TXT를 선택하고 콘솔에 표시된 값을 그대로 붙여 넣으세요. 따옴표를 직접 추가하지 마세요.
4. TTL과 반영 시간
Line은 Default, TTL은 기본값 600초로 두고 저장한 뒤 콘솔에서 인증하세요.
1. 설정 화면으로 가는 길
Route 53 콘솔 → Hosted zones → 내 도메인 선택 → Create record.
2. 호스트(Host / Name) 입력 방법
Record name 입력란이 이미 내 도메인으로 끝나는지 확인하세요. 그렇다면 상대 부분만 입력합니다(루트 도메인은 비워 둠). SPF와 DKIM은 각각 별도의 TXT 레코드로 만드세요.
3. 레코드 유형과 값
Record type은 TXT를 선택하고 값을 붙여 넣으세요. 호스트에 이미 SPF가 있다면 그 하나의 v=spf1 레코드에 include를 합치세요. 문자열 하나는 255자까지만 가능하므로, 긴 DKIM 값이 거부되면 같은 레코드 안에서 255자 이하의 따옴표 문자열 여러 개로 나누세요.
4. TTL과 반영 시간
TTL은 먼저 300초(5분)로 시작하고, 반영된 뒤 콘솔에서 인증하세요.
제공업체 콘솔의 화면 구성은 수시로 바뀝니다. 메뉴 이름이 다르더라도 같은 규칙을 따르세요: 상대 호스트, 유형은 TXT, 값은 그대로.
호스트 이름 변환표
제공업체가 루트 도메인을 자동으로 붙인다면, 콘솔이 반환한 전체 이름을 상대 호스트로 바꿔서 입력하세요.
| 경우 | 콘솔이 반환한 name | 입력할 호스트 | 비고 |
|---|---|---|---|
| 루트 도메인 SPF | example.com | @ | @는 루트 도메인을 뜻합니다. 이미 SPF가 있다면 두 번째 레코드를 만들지 말고 합치세요. |
| 하위 도메인 SPF | mail.example.com | 끝의 .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 / status | bool / string | 전체 통과 및 현재 상태 |
| checks[].name | string | dkim / spf |
| record_name / expected_value / passed | string / bool | 레코드 기대값 및 통과 결과 |
| found_values / lookup_error | string[] / 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로 설정합니다. 즉시 재등록·계정 이전은 보장하지 않습니다. 부분 생성 실패는 무한 재시도 대신 지원에 문의하세요.