크론 아웃리치 안전 게이트
자동화된 발신은 네 가지 비용이 많이 드는 방식으로 실패합니다: 잘못된 발신자 식별(SPF/DKIM 불일치 → 스팸 폴더), 잘못된 대상(이미 거절한 사람), 속도 제한 없음(무한 루프 → 도메인 평판 손상), 그리고 좀비 크론(캠페인 종료 후에도 발송). 이 게이트는 네 가지 모두를 10분 안에 잡아냅니다.
게이트 (다섯 가지 모두 통과 필수)
- 식별: 발신자 주소 + 표시 이름이 이 캠페인에 유효합니까? 확인:
- From 헤더가 RFC-5322-유효함 — 쉼표를 포함하는 표시 이름은 반드시 큰따옴표로 묶어야 합니다(
"Last, First" <addr>), 그렇지 않으면 API 422 오류 발생. - 발신 도메인에 선택한 공급자에 대해 SPF/DKIM이 정렬되어 있어야 함.
- API 호출에 사용자 지정
User-Agent사용 (기본 urllib/requests 기본값은 봇 차단될 수 있음, 예: Cloudflare 1010 — 본문을 읽고, 인증 실패로 추정하지 마세요).
- From 헤더가 RFC-5322-유효함 — 쉼표를 포함하는 표시 이름은 반드시 큰따옴표로 묶어야 합니다(
- 대상: 목록은 OPT-IN 또는 공개 전문 컨텍스트에서만 구성되어야 함; 이전에 옵트아웃한 사람은 제외; 구매한 목록 사용 금지; 캠페인이 명시적으로 SMS 범위가 아니면 전화번호 사용 금지.
- 상한: 실행당 하드 캡(최대 발송 수), 시간당 하드 캡, 그리고 글로벌 킬 스위치(크론이 각 발송 전에 확인하는 하나의 환경 변수/파일)가 있어야 합니다. 상한이 없으면 활성화하지 마세요.
- 콘텐츠: 기만적인 주장 없음, 가짜 긴급성 없음, 작동하는 수신 거부/옵트아웃 경로, 그리고 메시지가 발송 조직을 식별해야 함.
- 수명 주기: 캠페인에 종료 날짜가 있어야 함; 크론이 자동 비활성화되거나 운영자 일정에 검토 일정이 있어야 함; "일시 중지" 상태는 실제로 적용되어야 함 (스케줄러에서 확인, 플래그로 추정하지 않음).
중지를 의미하는 위험 신호
- "열지 않은 사람에게는 답장할 때까지 다시 보내면 됩니다."
- 목록이 연락처 수집 의도로 디렉토리를 스크래핑하여 얻은 경우.
- 누가 승인했는지 아는 사람이 없는 경우.
- 크론이 개인 주소에서 발송하는 경우.
해당되지 않는 경우
- 트랜잭션 이메일(기존 고객에게 보내는 영수증, 배송 알림).
- 사람이 직접 발송 버튼을 누르는 Human-in-the-loop 캠페인.
예시
질문: "이사 후 화요일 아웃리치 크론을 다시 활성화해 주세요." 이전: 바로 켜고, 오래된 목록(30명의 옵트아웃 포함)에 400건 발송됨을 발견. 이후: 게이트가 2/5를 잡아냄 — 대상 목록이 오래됨(옵트아웃 존재) 및 킬 스위치 미설정. 두 가지를 수정(목록 재구축, 환경 변수 킬 스위치 추가)한 후 활성화.
버전
1.0.0 — DDG 스타터 시리즈 (아웃리치 크론을 어렵게 운영한 경험에서 비롯됨).