- 증상: ① SPF를
v=spf1 include:spf.improvmx.com ~all로 저장했고 아무 에러도 없었다 — 저장 화면을 AI에게 보여주자 「서버 IP가 빠졌다」 ② 설정이 초록이 된 뒤 보낸 테스트 메일이 받은편지함에도 스팸함에도 없다 - 원인: ① AI의 첫 지시가 기존
ip4:서버IP를 지우고 교체하라는 것이었고 저는 그대로 넣었다 ② 전달받을 Gmail과 같은 Gmail에서 보내면 구글이 같은 Message-ID를 「이미 보낸 메일」로 보고 버린다 - 해결에 걸린 시간: ①은 2분(13:46 저장 → 13:48 수정) ②는 고칠 게 아니라 테스트 방법을 바꾸는 것 — 다른 주소에서 보낸다

혹시 이런 상황인가요?
도메인 메일을 무료 전달 서비스(ImprovMX)로 막 붙이셨죠. 그런데 이런 일이 벌어집니다.
- SPF에
v=spf1 include:spf.improvmx.com ~all을 넣고 저장했고 에러는 없다. 그런데 원래 있던ip4:서버IP가 사라진 걸 아무도 말해주지 않는다. - 「Active」까지 봤고, 제 Gmail에서
report@내도메인.com으로 테스트를 보냈는데 아무것도 안 온다. 대신 ImprovMX한테서 영어 알림 메일이 와 있다.
하나는 한 조각을 지운 것, 하나는 테스트 방법이 틀린 것입니다. 지난 편 도메인 메일 0원에 만들기의 46분 안에 이 둘이 다 있었습니다.
저도 똑같이 당했습니다
저는 수학 과외 도구를 AI와 만들다 앱을 스토어에 올리게 됐고, 앱의 「신고」 버튼이 보낼 주소로 report@내도메인.com(화면의 woodpecker-ai.com이 제 도메인입니다)을 만들던 중이었습니다. 화면을 캡처해서 AI에게 보여주고, AI가 주는 값을 그대로 넣는 식으로요.
13:46 SPF를 저장했습니다. 13:48 고쳤습니다. 2분짜리 오답이었지만, 제가 알아챈 게 아닙니다. 저장 화면을 캡처해 보냈더니 AI가 읽고 「한 조각이 빠졌다」고 했고, 이어 nslookup으로 그 값이 이미 바깥에 퍼진 것까지 확인했습니다. cafe24는 아무 경고 없이 저장해 줬으니, 화면을 안 보여줬으면 그냥 넘어갔을 겁니다.
13:51 테스트 메일, 같은 분에 알림 도착. 고칠 것이 없다는 걸 알기까지 알림 한 통이면 됐습니다. 대신 「그럼 진짜 되는 건가?」라는 찜찜함은 FAQ에 적었습니다.
원인은 이거였습니다
오답 1 — SPF에서 ip4: 한 조각을 지웠다
제가 저장한 값입니다. include:뿐이고 원래 있던 ip4:서버IP가 없습니다.

AI의 첫 지시가 이랬기 때문입니다.
B. 「SPF 관리」 라디오 선택
- 기존 SPF(
v=spf1 … cafe24 …)가 있으면 그 값을v=spf1 include:spf.improvmx.com ~all로 교체, 없으면 추가. 저장. (…)
「교체」. 기존 값을 지우고 새 값을 넣으라는 뜻입니다. 그런데 기존 값 v=spf1 ip4:<서버IP> ~all은 장식이 아니었습니다. 워드프레스 서버가 메일(회원 알림·문의 폼)을 보낼 때 「이 도메인 이름으로 보낼 자격이 있다」고 증명하는 줄이었고, 지우면 사이트 메일이 스팸 판정을 받을 수 있습니다.
SPF(Sender Policy Framework): 「이 도메인 이름으로 메일을 보낼 자격이 있는 서버 목록」을 DNS에 적어 둔 것. ip4:는 서버 IP로, include:는 다른 서비스 목록을 끌어와 자격을 줍니다. 새 서비스는 추가하지 갈아 끼우지 않습니다.
사실 AI는 제가 저장 화면을 보내기 전에 이미 지시를 고쳐 보냈습니다. 13:41에 제가 보낸 ImprovMX 「DNS Records」 화면이 제 도메인에 이미 있던 ip4:를 감지하고, 자기 것과 합친 값을 권고값으로 보여줬거든요.

AI가 이걸 보고 지시를 바꿨습니다.
기존 값
v=spf1 ip4:<서버IP> ~all→ 다음으로 교체:v=spf1 ip4:<서버IP> include:spf.improvmx.com ~all— 저장 (ip4 부분을 지우면 워드프레스가 보내는 메일이 스팸 판정될 수 있으니 반드시 유지)
두 지시의 차이는 ip4:<서버IP> 한 조각뿐입니다. 그런데 13:46에 제가 저장한 값은 첫 지시의 것이었습니다. 왜 그랬는지는 저도 모르겠습니다 — 처음 받은 값을 그대로 넣었다는 것만 남아 있습니다. 그리고 그 한 조각이 사이트 메일의 생사를 가릅니다. 저장 화면을 보낸 뒤 AI가 이렇게 알려왔습니다(nslookup으로 전파까지 확인한 뒤의 문장입니다).
cafe24 — MX는 완료, SPF만 한 번 더. 실측으로 이미 DNS에 반영됐습니다(MX 두 줄 improvmx, SPF 등록됨). 그런데 SPF 값이
v=spf1 include:spf.improvmx.com ~all로 들어가서 워드프레스 서버 IP(ip4:<서버IP>)가 빠졌습니다. 그대로 두면 사이트가 보내는 메일(회원 알림·문의 폼)이 스팸 판정될 수 있습니다.
오답 2 — 같은 Gmail로 자기한테 테스트를 보냈다
Active 직후 AI가 제 Gmail에서 report@내도메인.com으로 테스트 1통을 보냈습니다(13:51). 전달 대상도 같은 Gmail이니 잘 되면 되돌아와야 합니다. 안 왔습니다. AI가 스팸함까지 검색해도 0건. 대신 ImprovMX 알림(맨 위 사진)이 이유를 알려줬습니다. 핵심 원문입니다.
Gmail and Google Workspace silently drop messages that arrive with the same Message-ID they just sent out, so to get your test through, ImprovMX rewrote the Message-ID and re-signed the forwarded copy with our own improvmx.net DKIM key.
Side effect: the message often ends up marked as spam and/or phishing because of failed DMARC alignment, and the delivered copy often shows a weird “via improvmx.net” symbol next to the sender address. This only applies to messages you send to yourself — incoming mail from other senders won’t trigger these warnings, and is delivered with its original signatures intact.
(굵게는 제가 넣었습니다.)
풀어 쓰면, Gmail은 메일마다 붙는 고유 번호(Message-ID)를 기억해 뒀다가 자기가 방금 내보낸 번호가 그대로 되돌아오면 「루프」로 보고 조용히 버립니다. 조용히 — 이날은 그래서 스팸함에도 없었습니다. ImprovMX가 번호를 고쳐 다시 보내면 그 흔적 때문에 스팸·피싱으로 찍히기 쉽고요. 어느 쪽이든 내가 나한테 보낼 때만 생기는 일입니다.
메일 한 통마다 붙는 고유 식별 문자열. 전달·답장으로 돌아다녀도 이 값으로 「그 메일」임을 알아봅니다.
이렇게 고쳤습니다
오답 1 — 「수정」으로 한 조각 되살리기
cafe24 「SPF 관리」에서 행 선택 → 「수정」 → 입력칸에 ip4:[내-서버IP] include:spf.improvmx.com(앞뒤 v=spf1·~all은 cafe24가 붙입니다). 저장값은 이렇게 바뀝니다.
전
"v=spf1 include:spf.improvmx.com ~all"
후
"v=spf1 ip4:[내-서버IP] include:spf.improvmx.com ~all"
화면으로는 이렇습니다.

nslookup -type=TXT [내도메인] 8.8.8.8로 바깥에 퍼진 값을 보면 "v=spf1 ip4:<서버IP> include:spf.improvmx.com ~all" 한 줄이 나와야 합니다. 이날은 AI가 수정 직후 재서 「이미 전파됐다」고 확인했습니다.
오답 2 — 고치는 게 아니라 테스트를 바꾼다
설정은 맞았고 검증 방법이 틀렸습니다. 그래서 그날은 AI가 「주소 확정」을 선언했고 저는 받아들였습니다 — ImprovMX가 수신·전달을 확인해 줬고, 알림이 「다른 발신자는 정상」이라고 명시했으니까요. AI가 「언젠가 다른 주소에서 한 통 보내 교차 확인하면 더 확실하다, 급하지 않다」고 했고, 그 교차 확인은 그날 밤까지 안 했습니다. 안 한 건 안 했다고 적어 둡니다.
같은 실수를 막는 체크리스트
- SPF를 넣기 전에 기존 값을 복사해 둔다. 이미 있는
ip4:include:에 덧붙인다. - AI가 「교체」라고 하면 되묻는다 — 「기존 값에 있던 건 어디 갔지?」 (저는 안 물었습니다.)
- 전달 서비스 화면의 「현재 값 / 권고값」 대조를 저장 전에 본다. 권고값이 곧 넣을 값이다.
- 저장 뒤 저장 화면을 AI에게 보여주거나
nslookup -type=TXT [내도메인] 8.8.8.8로 바깥 값을 확인한다. 이날 저를 구한 건 캡처 한 장이었다. - 전달 테스트는 다른 계정에서. 같은 Gmail은 안 오거나 스팸함에 「via improvmx.net」으로 올 수 있어 판정 근거가 못 된다(안내:
improvmx.com/guides/testing-forwarding-same-gmail-account). - 「안 왔다」 앞에서 설정을 뜯기 전에 전달 서비스의 알림부터 본다. 이날은 그게 답이었다.
FAQ
Q. 오답 1을 안 고쳤으면 실제로 무슨 일이 생기나요?
사이트가 보내는 메일이 받는 쪽에서 「자격 없는 서버」로 판정돼 스팸함에 갈 수 있습니다. 전달(받기)은 멀쩡해서 한동안 모르고 지나갈 수 있는 오답입니다.
Q. 같은 Gmail로 보냈는데 스팸함에라도 있어야 하는 것 아닌가요?
알림 원문대로 「silently drop」 — 스팸함에도 남지 않습니다. 이날 AI가 스팸함까지 검색해도 0건이었습니다. ImprovMX가 Message-ID를 고쳐 다시 보내면 스팸함에 갈 수도 있다고는 하는데, 이날은 그것도 없었습니다.
Q. 그럼 정말 전달이 되는 건지 어떻게 믿나요?
ImprovMX가 「수신·전달 확인」이라 알렸고, 알림도 「다른 발신자는 원래 서명 그대로 도착」이라 합니다. 확실히 하려면 다른 주소에서 한 통. 저는 아직 안 했고, 하면 추기하겠습니다.
한 줄 교훈
「교체」는 「추가」가 아니다 — 기존 값에 뭐가 있었는지 먼저 보고, 「안 온다」는 설정이 아니라 테스트 방법의 문제일 수 있다. 틀린 답을 지우기 전에 원래 답에 맞는 부분이 있었는지 보는 것 — 오답노트 첫 줄에 늘 쓰는 말인데 DNS에서도 똑같았습니다.