메일 서버 없이 내 도메인으로 메일 보내기 — Cloudflare + Resend + Gmail
leetei.com 같은 개인 도메인으로 메일을 무료로 주고받는 실전 구성. 수신은 Cloudflare Email Routing, 발신은 Resend, 평소 쓰는 Gmail에 그대로 물려서 끝낸다.
개인 도메인을 하나 사두면 me@내도메인.com 같은 주소를 갖고 싶어진다. 그런데 막상 알아보면 선택지가 애매하다. Google Workspace는 사람 수만큼 매달 돈이 나가고, 무료로 조립하자니 정보가 죄다 옛날 방식(smtp.gmail.com + 앱 비밀번호)이라 스팸함으로 직행하기 십상이다.
결론부터 말하면, 수신과 발신을 분리해서 각각 잘하는 무료 서비스에 맡기는 것이 가장 깔끔하다. 메일 서버를 직접 돌릴 필요도 없다.
전체 구조
수신: 보낸사람 → Cloudflare Email Routing → 내 Gmail 받은편지함
발신: ① 코드/앱 → Resend API ─┐
② Gmail 화면 → Resend SMTP ─┴→ 내도메인 DKIM 서명 → 수신자
- 수신은 Cloudflare Email Routing이 맡는다. 무료고, 도메인으로 온 메일을 평소 쓰는 편지함으로 포워딩해준다.
- 발신은 Resend가 맡는다. 무료 티어가 월 3,000통이고, 내 도메인으로 제대로 DKIM 서명을 해줘서 스팸함에 안 빠진다.
핵심은 발신용 인증 레코드가 send.내도메인.com 서브도메인에 붙는다는 점이다. 그래서 수신용 루트 설정과 절대 충돌하지 않는다.
1. 수신 — Cloudflare Email Routing
도메인의 DNS를 Cloudflare로 옮겨뒀다면 이건 클릭 몇 번이다. 대시보드에서 도메인 선택 → Email → Email Routing → Enable을 누르면 필요한 MX 레코드가 자동으로 들어간다. 그다음 받을 주소(contact@, me@ 등)와 포워딩 목적지를 지정하면 끝. 이 시점부터 도메인으로 오는 메일이 내 Gmail로 떨어진다.
2. 발신 — Resend에 도메인 등록
Resend에 가입하고 도메인을 등록하면 DNS 레코드 세 개를 알려준다. API로도 다 되는데, 도메인 등록은 이렇게 한 줄이다.
curl -X POST https://api.resend.com/domains \
-H "Authorization: Bearer $RESEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"leetei.com","region":"us-east-1"}'
응답으로 받은 레코드를 DNS에 넣는다. Cloudflare를 쓰면 이것도 API로 조용히 처리할 수 있다.
| 타입 | 이름 | 값 | 용도 |
|---|---|---|---|
| TXT | resend._domainkey | p=MIGf…(DKIM 공개키) | DKIM 서명 |
| MX | send | feedback-smtp.us-east-1.amazonses.com (우선순위 10) | 반송 처리 |
| TXT | send | v=spf1 include:amazonses.com ~all | 발신 SPF |
| TXT | _dmarc | v=DMARC1; p=none; | DMARC(모니터링) |
주의: 루트 도메인의 기존 SPF(수신 라우팅용)는 건드리지 않는다. 발신 SPF는 send 서브도메인에만 붙기 때문에 둘이 공존한다.
레코드를 넣고 인증을 트리거하면 보통 몇 분 안에 verified로 바뀐다. 그 뒤로는 @leetei.com의 어떤 로컬파트로든 발신할 수 있다.
curl -X POST https://api.resend.com/emails \
-H "Authorization: Bearer $RESEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Tei <me@leetei.com>",
"to": ["someone@example.com"],
"subject": "도메인 발신 테스트",
"html": "<p>Resend를 통한 내 도메인 발신입니다.</p>"
}'
3. 평소 쓰는 Gmail에 물리기
코드가 아니라 사람이 직접 보내는 메일은 Gmail의 "다른 주소에서 메일 보내기"에 Resend의 SMTP를 연결하면 된다. Gmail 설정 → 계정 및 가져오기 → 다른 이메일 주소 추가에서 아래 값을 넣는다.
| 항목 | 값 |
|---|---|
| SMTP 서버 | smtp.resend.com |
| 포트 | 465 (SSL) |
| 사용자 이름 | resend (이메일 주소가 아니다) |
| 비밀번호 | Resend API 키(re_…) |
여기서 흔히 막히는 지점이 사용자 이름이다. 이메일 주소가 아니라 resend라는 고정 문자열을 넣어야 한다. 앱 비밀번호 같은 건 필요 없다 — 이게 옛날 smtp.gmail.com 방식과의 결정적 차이다.
설정을 마치면 Gmail이 확인 코드를 그 주소로 보내는데, Cloudflare 라우팅 덕분에 내 편지함으로 도착한다. 코드를 입력하면 이제 메일 쓸 때 보낸사람을 me@leetei.com으로 고를 수 있다.
4. 제대로 됐는지 확인
새 주소로 자기 자신에게 한 통 보내고, 받은 메일에서 원본 보기를 열어 세 가지를 확인한다.
SPF: PASS
DKIM: PASS
DMARC: PASS
셋 다 PASS면 스팸함 걱정 없이 끝난 것이다.
비용과 한도
| 서비스 | 무료 한도 | 역할 |
|---|---|---|
| Cloudflare Email Routing | 무제한 포워딩 | 수신 |
| Resend | 월 3,000통 / 일 100통 | 발신 |
개인이 쓰기엔 넘치고, 코드에서 알림 메일까지 쏴도 여유가 있다. 나중에 진짜 메일함(웹메일·IMAP)이 필요해지면 그때 Zoho Mail Lite($1/월)나 셀프호스팅으로 넘어가면 된다. DNS 레코드 몇 줄만 바꾸면 되니까 지금 구성에 갇히는 것도 아니다.
메일은 정답이 없는 분야다. 편함을 돈으로 살 것이냐, 통제권을 손으로 가질 것이냐의 저울질일 뿐이다. 이 구성은 그 저울에서 0원으로 통제권 쪽에 최대한 붙은 지점이고, 개인 도메인 하나 굴리기엔 이만하면 충분하다.