먼저 sandbox 상태를 확인하세요. 이 상태에 따라 테스트 가능 여부가 결정됩니다. 새 SES 계정은 모든 Region에서 sandbox 상태로 시작하며, 이 상태에서는 SES가 확인된 이메일 주소, 확인된 도메인 및 자체 mailbox simulator로만 이메일을 전송합니다. 또한 24시간당 200개, 초당 1개의 전송 한도가 적용됩니다.
Email Spam Tester 주소를 확인해도 이 제한을 피할 수 없습니다. SES는 링크가 포함된 이메일을 보내 수신자를 확인합니다. Email Spam Tester 주소는 정확히 하나의 메시지만 받은 후 닫히므로, 확인 이메일이 그 주소를 사용해 버립니다. 따라서 실제로는 이메일을 보내는 Region에서 production access가 필요합니다. AWS는 해당 요청에 96시간 이내에 최초 답변을 제공한다고 명시합니다.
sandbox 상태는 Region별로 적용되므로 eu-west-1에서 production 상태인 계정도 us-east-1에서는 여전히 sandbox 상태일 수 있습니다. identity도 Region별로 관리되며, 각각 자체 DKIM 레코드가 있습니다.
주소를 받은 후 메시지 한 통 보내기
email-spam-tester.com을 열고 표시되는 주소를 복사하세요. 계정이나 API 키가 필요 없으며, 주소는 t.email-spam-tester.com에서 test- 뒤에 20자가 붙는 형식입니다. 주소는 1시간 동안 유효하고 메시지는 한 통만 보낼 수 있으므로, 주소를 받기 전에 전송 명령을 준비하세요.
가장 간단한 전송 방법은 CLI입니다. AWS의 SES 테넌트 페이지에 있는 예제에서 테넌트 및 구성 세트 플래그를 제거한 형태입니다.
aws sesv2 send-email \
--from-email-address "sender@yourdomain.com" \
--destination "ToAddresses=test-xxxxxxxxxxxxxxxxxxxx@t.email-spam-tester.com" \
--content "Simple={Subject={Data='Test Subject',Charset=utf-8},Body={Text={Data='Test email body',Charset=utf-8}}}"
프로덕션 환경에서도 From은 확인된 자격 증명이어야 합니다. 이런 텍스트 전용 본문만으로도 인증과 IP는 테스트할 수 있지만, 콘텐츠에 관해서는 거의 알 수 없습니다. 제대로 판정하려면 애플리케이션에서 실제로 보내는 메시지를 HTML 부분 및 헤더와 함께 보내세요. boto3의 send_email, SMTP 라이브러리 또는 다른 방식 중 무엇을 사용하든 동일한 코드 경로를 사용하세요. 프로덕션 전송에서 구성 세트를 사용한다면 테스트가 동일한 설정을 거치도록 여기에 --configuration-set-name도 추가하세요.
수신함 테스트도 같은 명령에 연결됩니다. 제공업체별 수신함 주소를 테스트 주소와 함께 ToAddresses에 넣고, 해당 마커를 Subject 데이터에 넣으세요. 그러면 한 번의 호출로 두 보고서가 생성되며, 두 번째 보고서에는 Gmail, Outlook, Yahoo 및 기타 제공업체에서 메시지가 도착한 폴더가 표시됩니다. 이 수신함 주소도 확인된 주소가 아니므로 이 테스트 역시 프로덕션 액세스가 필요합니다.
콘솔을 사용하는 방법도 있습니다. Configuration > Identities를 열고 자격 증명을 클릭한 다음 Send test email을 선택하세요. 자체 헤더가 포함된 전체 MIME 메시지를 붙여 넣으려면 Raw를 선택하세요. AWS는 콘솔을 일반적으로 테스트 이메일에만 사용하는 도구로 설명하며, 문서에는 테스트 접두사나 메시지에 대한 다른 변경 사항이 설명되어 있지 않습니다. 샌드박스에서는 Custom recipient 필드에 확인된 주소를 입력해야 하므로 앞서 설명한 문제로 돌아가게 됩니다.
새 SES 자격 증명이 보고서에 표시되는 방식
보고서에서 확인 · 인증
- SPF통과불일치MAIL FROM이 도메인의 하위 도메인이 아니라 amazonses.com의 하위 도메인입니다.
- DKIM통과일치Easy DKIM이 도메인의 2048비트 키로 모든 메시지에 서명합니다.
- DMARC통과DMARC 레코드를 게시하면 정렬된 DKIM 서명을 기준으로 통과합니다.
기본 SES 자격 증명에서는 SPF가 통과하지만 amazonses.com을 기준으로 합니다. 사용자 지정 MAIL FROM을 설정해야 도메인과 정렬됩니다.
DKIM. Easy DKIM은 도메인 자격 증명의 기본 설정이며, 2048비트 키로 모든 메시지에 서명합니다. 설정하려면 token.dkim.<region>.amazonses.com을 가리키는 token._domainkey.yourdomain.com이라는 CNAME 레코드 3개가 필요합니다. DKIM 검사에 실패하면 먼저 두 가지를 확인하세요. DNS 전파가 완료되었는지 확인하고, AWS에서는 최대 72시간이 걸릴 수 있습니다. 또한 DNS 호스트가 이름 뒤에 도메인을 추가하여 token._domainkey.yourdomain.com.yourdomain.com을 만들지 않았는지 확인하세요. BYODKIM을 사용하면 대신 자체 selector에 TXT 레코드 하나를 게시합니다. 두 방식 사이에서 전환하는 도중에는 SES가 서명 없이 메시지를 보낼 수 있으며, 보고서에는 DKIM 누락으로 표시됩니다. DKIM 검사기에서는 토큰을 selector로 사용합니다.
SPF와 Return-Path. 기본적으로 SES는 amazonses.com의 하위 도메인을 MAIL FROM으로 사용합니다. SPF는 통과하지만 amazonses.com을 기준으로 하므로, 보고서에는 SPF가 From과 정렬되지 않은 것으로 표시됩니다. DKIM이 정렬되어 있다면 감점은 적고, 100점 척도에서 5점 대신 2점이 차감되며, DMARC는 여전히 DKIM을 기준으로 통과합니다. SPF도 정렬하려면 정확히 하나의 MX 레코드 10 feedback-smtp.<region>.amazonses.com과 TXT 레코드 v=spf1 include:amazonses.com ~all을 사용하여 사용자 지정 MAIL FROM 하위 도메인을 설정하세요. 이메일을 수신하는 하위 도메인은 선택하지 마세요. 또한 DMARC 레코드에 aspf=s를 넣지 마세요. AWS에 따르면 엄격한 SPF 정책에서는 SES의 SPF 정렬이 작동하지 않습니다.
DMARC. SES는 DMARC 레코드를 대신 게시하지 않습니다. AWS 예시는 v=DMARC1;p=quarantine;rua=mailto:my_dmarc_report@example.com입니다. 아직 DMARC 보고서를 확인하는 사람이 없다면 p=none으로 시작하고 나중에 정책을 강화하세요. DMARC 검사기에서 현재 설정을 확인할 수 있으며, DMARC fail에서는 일반적인 오류 원인을 설명합니다.
예시 값입니다. 계정에서 실제 값을 복사하세요.
| 이름 | Type | 값 | 용도 | 복사 |
|---|---|---|---|---|
| token. | CNAME | token. | Easy DKIM입니다. 토큰마다 하나씩 총 3개가 필요합니다. | |
| mail. | MX | 10 feedback-smtp. | 사용자 지정 MAIL FROM입니다. 이메일을 수신하지 않는 하위 도메인에 MX 레코드를 정확히 하나만 설정합니다. | |
| mail. | TXT | v= | 사용자 지정 MAIL FROM용 SPF이며, SPF를 From과 정렬합니다. | |
| _dmarc. | TXT | v= | AWS의 DMARC 예시입니다. 아직 보고서를 확인하는 사람이 없다면 p=none으로 시작하고 aspf=s는 제외하세요. |
List-Unsubscribe. SES는 연락처 목록과 주제를 가리키도록 ListManagementOptions를 설정하여 전송할 때만 List-Unsubscribe와 List-Unsubscribe-Post를 추가합니다. 이 경우에도 수신자가 한 명인 메시지와 Easy DKIM을 사용하는 메시지에만 추가되며, 직접 설정한 구독 취소 헤더는 SES가 덮어씁니다. 그 밖의 모든 메시지는 구독 취소 헤더 없이 전송됩니다. 뉴스레터라면 직접 헤더를 추가하지 않는 한 List-Unsubscribe 검사와 원클릭 검사가 모두 실패합니다. 2024년 3월부터 v2 API에서는 raw MIME 없이 사용자 지정 헤더를 사용할 수 있습니다. AWS의 원클릭 관련 블로그 게시물을 바탕으로 작성한 두 헤더는 다음과 같습니다.
"Headers": [
{ "Name": "List-Unsubscribe",
"Value": "<https://yourdomain.com/unsub?address=x&topic=x>, <mailto:unsubscribe@yourdomain.com>" },
{ "Name": "List-Unsubscribe-Post",
"Value": "List-Unsubscribe=One-Click" }
]
그런 다음 엔드포인트에서 POST를 처리해야 합니다. 목록 헤더가 없는 비밀번호 재설정 메시지와 영수증은 다른 경우이며, 보고서에서 대량 발신자 검사 그룹이 건너뛴 것으로 표시됩니다. 헤더에 대한 자세한 내용은 List-Unsubscribe 페이지에서 확인하세요.
IP 및 차단 목록
새 계정은 다른 SES 사용자와 공유하는 IP에서 이메일을 보내며, AWS는 발송량이 많고 일정하지 않다면 공유 IP를 계속 사용할 것을 권장합니다. 보고서는 발송 IP를 21개 차단 목록에서 조회하며, 공유 주소가 차단 목록에 있으면 해당 결과는 IP 풀에 적용됩니다. 전용 IP에는 직접 워밍업해야 하는 Standard와 SES가 워밍업을 처리하는 Managed가 있습니다. 전용 IP가 차단 목록에 등록되면 해당 결과는 자체 발송에만 관련됩니다. Headers 탭에서 찾은 IP는 차단 목록 검사기에서 바로 확인할 수 있습니다.
AWS도 계정을 모니터링합니다. AWS의 집행 FAQ에서는 존재하지 않는 수신자로 인해 반송률이 높아지지 않도록 실제로 이메일을 받을 수 있는 주소나 시뮬레이터를 사용해 테스트하라고 안내합니다. 반송률이 5%이거나 신고율이 0.1%이면 계정을 검토 대상으로 지정합니다.
하단의 수정 계획에는 최대 8개의 변경 사항이 표시됩니다. 적용할 DNS 레코드가 있으면 복사할 수 있도록 함께 제공되며, 각 수정 사항 옆의 점수는 해당 수정과 관련된 검사에서 현재 부과된 감점입니다. 모델은 수정 사항을 선택하고 설명하지만 우선순위를 지정하지는 않습니다. 검사 이름의 의미를 모르겠다면 문서에서 42개 검사를 각각 확인할 수 있습니다.
AWS 참고 자료
샌드박스 및 프로덕션 액세스docs.aws.amazon.com ↗Easy DKIMdocs.aws.amazon.com ↗사용자 지정 MAIL FROMdocs.aws.amazon.com ↗SES의 DMARCdocs.aws.amazon.com ↗구독 관리docs.aws.amazon.com ↗sesv2 send-emaildocs.aws.amazon.com ↗질문
SES 샌드박스에서 테스트할 수 있나요?
제공된 주소로는 테스트할 수 없습니다. 샌드박스에서 SES는 확인된 수신자에게만 이메일을 전송하며, 제공된 주소를 확인하면 이 주소가 수신할 수 있는 한 번의 메시지를 사용하게 됩니다. 해당 리전에 대한 프로덕션 액세스를 요청하고, 그동안 무료 DKIM, SPF, DMARC 검사기로 레코드를 확인하세요.
SES 메일박스 시뮬레이터에서도 같은 정보를 확인할 수 있나요?
아니요. SES가 반송, 스팸 신고 또는 전송을 처리하는 방식을 보여주며, 일반 이메일 전송과 동일하게 요금이 부과됩니다. 헤더, 인증 또는 콘텐츠는 분석하지 않습니다.
루트 도메인의 SPF 레코드에 SES를 추가해야 하나요?
수신 서버는 MAIL FROM 도메인을 기준으로 SPF를 확인합니다. 기본적으로 이 도메인은 amazonses.com의 하위 도메인이며, 사용자 지정 MAIL FROM을 사용하는 경우에는 해당 하위 도메인입니다. SES용 SPF 레코드는 이 하위 도메인에 있어야 하며, MAIL FROM 페이지에 따르면 루트 도메인에는 아무것도 설정할 필요가 없습니다.