rankly.kr (가비아)admin@rankly.kr (다음 스마트워크)입력: rankly.kr
Advanced Settings (선택사항, 기본값 사용 권장):
❌ Link branding
Next 클릭
SendGrid가 3개의 CNAME 레코드를 제공합니다. 반드시 메모하거나 화면 캡처하세요!
예시:
Host Type Data/Value
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
em1234.rankly.kr CNAME u12345.wl123.sendgrid.net
s1._domainkey.rankly.kr CNAME s1.domainkey.u12345.wl123.sendgrid.net
s2._domainkey.rankly.kr CNAME s2.domainkey.u12345.wl123.sendgrid.net
⚠️ 주의: 위 값들은 예시입니다. SendGrid에서 제공하는 실제 값을 사용해야 합니다!
rankly.kr 도메인 찾기SendGrid에서 제공한 3개의 레코드를 각각 추가합니다.
타입: CNAME
호스트: em1234 (SendGrid에서 제공한 값의 .rankly.kr 앞부분만)
값/위치: u12345.wl123.sendgrid.net (SendGrid에서 제공한 값)
TTL: 3600 (1시간) 또는 기본값
타입: CNAME
호스트: s1._domainkey
값/위치: s1.domainkey.u12345.wl123.sendgrid.net
TTL: 3600
타입: CNAME
호스트: s2._domainkey
값/위치: s2.domainkey.u12345.wl123.sendgrid.net
TTL: 3600
먼저 현재 SPF 레코드가 있는지 확인:
nslookup -type=TXT rankly.kr
새로 추가:
타입: TXT
호스트: @
값: v=spf1 include:_spf.daum.net include:sendgrid.net ~all
TTL: 3600
기존 레코드에 include:sendgrid.net 추가:
Before:
v=spf1 include:_spf.daum.net ~all
After:
v=spf1 include:_spf.daum.net include:sendgrid.net ~all
# CNAME 레코드 확인
nslookup -type=CNAME em1234.rankly.kr
nslookup -type=CNAME s1._domainkey.rankly.kr
nslookup -type=CNAME s2._domainkey.rankly.kr
# SPF 레코드 확인
nslookup -type=TXT rankly.kr
em1234.rankly.kr 입력 후 CNAME 조회s1._domainkey.rankly.kr, s2._domainkey.rankly.kr도 확인성공 예시:
em1234.rankly.kr → u12345.wl123.sendgrid.net
실패 예시:
Non-existent domain (아직 전파 안 됨)
인증이 완료되면:
- noreply@rankly.kr에서 이메일 발송 가능
- 도메인 신뢰도 향상 (스팸 방지)
cd mysite
python test_sendgrid_email.py
테스트 항목: 1. 기본 이메일 발송 2. OTP 이메일 발송 (실제 OTP 코드 생성) 3. Reply-To 헤더 확인
입력 예시:
테스트 이메일 주소를 입력하세요: your-email@example.com
cd mysite
python manage.py shell
from django.core.mail import send_mail
from django.conf import settings
# 간단한 테스트
send_mail(
subject='[Rankly] 테스트',
message='SendGrid 연동 테스트입니다.',
from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=['your-email@example.com'],
fail_silently=False,
)
print("✅ 발송 완료! 이메일함을 확인하세요.")
서버 실행:
cd mysite
python manage.py runserver
OTP 발송:
curl -X POST "http://localhost:8000/api/v1/accounts/otp/send" \
-H "Content-Type: application/json" \
-d '{"email": "your-email@example.com"}'
성공 응답:
{
"detail": "OTP가 발송되었습니다.",
"expires_at": "2025-12-09T13:00:00+09:00"
}
도메인 인증이 완료되기 전에 테스트하려면 Single Sender Verification 사용:
Ranklyadmin@rankly.kr 또는 개인 Gmailadmin@rankly.kr주의: Single Sender는 1개 이메일만 인증 가능. 도메인 인증 완료 후에는 불필요.
원인: SendGrid API 키가 잘못되었거나 만료됨
해결:
1. .live1.env 파일의 SENDGRID_API_KEY 확인
2. SendGrid 콘솔 → Settings → API Keys에서 새 키 생성
3. 환경변수 업데이트 후 서버 재시작
원인: 발신 이메일 주소가 인증되지 않음
해결:
1. Single Sender Verification으로 임시 인증 (admin@rankly.kr)
2. 또는 도메인 인증 완료 대기
원인: 네트워크 또는 방화벽 문제
해결:
1. 포트 587이 열려 있는지 확인
2. 방화벽 설정 확인
3. 프록시 설정 확인
4. VPN 연결 시 해제 후 재시도
원인: 도메인 신뢰도 부족 또는 SPF/DKIM 미설정
해결:
1. SPF 레코드 확인
2. DKIM 인증 완료 확인 (도메인 인증 시 자동)
3. 도메인 Warm-up 필요 (처음에는 소량 발송)
4. 이메일 내용 개선 (스팸 키워드 제거)
원인: DNS 전파 미완료
해결:
1. 10분~1시간 대기
2. DNS 캐시 초기화:
Windows: ipconfig /flushdns
3. 레코드 값 재확인 (오타 여부)
4. TTL 값 확인 (3600 권장)
.live1.env)SENDGRID_API_KEY=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
DEFAULT_FROM_EMAIL=noreply@rankly.kr
REPLY_TO_EMAIL=admin@rankly.kr
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey'
EMAIL_HOST_PASSWORD = os.environ.get("SENDGRID_API_KEY")
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'noreply@rankly.kr'
REPLY_TO_EMAIL = 'admin@rankly.kr'
noreply@rankly.kr (발송 전용, 수신 불가)admin@rankly.kr (다음 스마트워크, 수신 가능)도메인 인증 완료 전에 빠르게 테스트하려면:
From Name: Rankly
From Email: admin@rankly.kr
Reply To: admin@rankly.kradmin@rankly.kr 이메일함에서 인증 링크 클릭.live1.env 수정:
env
DEFAULT_FROM_EMAIL=admin@rankly.kr # 임시bash
cd mysite
python test_sendgrid_email.py도메인 전체를 인증하여 noreply@rankly.kr 등 모든 주소 사용:
.live1.env 수정:
env
DEFAULT_FROM_EMAIL=noreply@rankly.kr # 프로덕션
REPLY_TO_EMAIL=admin@rankly.krcd mysite
python test_sendgrid_email.py
입력 프롬프트:
테스트 이메일 주소를 입력하세요: admin@rankly.kr
예상 출력:
╔══════════════════════════════════════════════════════════╗
║ Rankly SendGrid 테스트 ║
╚══════════════════════════════════════════════════════════╝
📧 수신 이메일: admin@rankly.kr
📤 발신 이메일: noreply@rankly.kr
💬 답장 이메일: admin@rankly.kr
🔑 API 키: 설정됨 (SG.zJMBIHI...)
Enter를 눌러 테스트를 시작하세요...
══════════════════════════════════════════════════════════
1. 기본 이메일 발송 테스트
══════════════════════════════════════════════════════════
발신: noreply@rankly.kr
수신: admin@rankly.kr
✅ 발송 성공! (발송 수: 1)
이메일함을 확인하세요 (스팸 폴더도 확인)
══════════════════════════════════════════════════════════
2. OTP 이메일 발송 테스트
══════════════════════════════════════════════════════════
테스트 사용자: 귀여운토끼123 (admin@rankly.kr)
✅ OTP 발송 성공!
- OTP 코드: 123456
- 만료 시간: 2025-12-09 13:00:00+09:00
- 이메일함을 확인하세요
══════════════════════════════════════════════════════════
3. Reply-To 헤더 테스트
══════════════════════════════════════════════════════════
✅ 발송 성공!
- From: noreply@rankly.kr
- Reply-To: admin@rankly.kr
══════════════════════════════════════════════════════════
테스트 결과 요약
══════════════════════════════════════════════════════════
기본 이메일: ✅ 성공
OTP 이메일: ✅ 성공
Reply-To 헤더: ✅ 성공
총 3개 테스트 중 3개 성공
💡 OTP 코드: 123456
이 코드로 회원가입을 테스트할 수 있습니다.
admin@rankly.kr 이메일함에서 3개의 이메일 확인:
1. [Rankly] SendGrid 테스트
2. [Rankly] 이메일 인증 코드 (OTP 포함)
3. [Rankly] Reply-To 테스트
rankly.kr Verified 상태)admin@rankly.kr로 잘 설정되는지 확인cat .live1.env | grep -E "SENDGRID|EMAIL"
예상 출력:
SENDGRID_API_KEY=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
DEFAULT_FROM_EMAIL=noreply@rankly.kr
REPLY_TO_EMAIL=admin@rankly.kr
Q: noreply@rankly.kr 이메일을 받을 수 있나요?
- 아니요. noreply@는 발송 전용입니다. 사용자가 답장하면 admin@rankly.kr로 전달됩니다.
Q: 도메인 인증 없이 발송할 수 있나요? - Single Sender Verification으로 1개 이메일만 가능합니다. - 프로덕션에서는 반드시 도메인 인증 필요합니다.
Q: 하루에 몇 개까지 발송 가능한가요? - SendGrid 무료 플랜: 하루 100개 - 유료 플랜: 플랜에 따라 다름 (Essentials 50K/월부터)
Q: 이메일이 스팸으로 분류됩니다. - 도메인 인증 완료 확인 - SPF/DKIM 설정 확인 - 처음에는 소량 발송으로 시작 (Warm-up) - 이메일 내용에 스팸 키워드 제거
Q: DNS 레코드 추가 후 얼마나 기다려야 하나요? - 보통 10분~1시간 - 최대 48시간까지 걸릴 수 있음 - 온라인 도구로 주기적으로 확인
작성일: 2025-12-09
프로젝트: Rankly
도메인: rankly.kr