getback-recruit-mail

SkillCommunication

Guides your agent through sending bulk recruitment and encouragement emails to a subscriber list.

Use getback-recruit-mail in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add getback-recruit-mail and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the getback-recruit-mail skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

getback-recruit-mailStart free
About this skill

Read this when sending GETBACK (GET100) cohort recruitment or encouragement emails to the subscriber list. Covers triple-exclusion comparison of targets, passing the send_bulk quality gate, ad labeling requirements, and send history logging procedures. Handles requests like "let's send a recruitment

What this skill tells your AI

The instructions your AI receives, as published by bam-bam-2/solo-skills in skills/getback-recruit-mail/SKILL.md and read by ahel’s review.

이 스킬이 시스템에 하는 일 (설치 전 확인)

  • 여러 명에게 메일을 실제로 발송합니다. 되돌릴 수 없습니다.
  • 발송 전에 수신 대상을 3중으로 대조해 제외하는 절차가 들어 있습니다. 그 단계를 건너뛰지 마세요.
  • SMTP 계정 정보가 필요합니다. 환경변수로만 읽고 저장하지 않습니다.
  • 광고성 메일 표기 의무는 발송자 본인 책임입니다.

겟백 모집 메일 발송

기수마다 반복된다. 2026-09-02에 사전알림 10명 + 광고동의 43명을 보내며 실측한 절차다.

절대 규칙 — 추적을 끄고 보내지 않는다

모든 발송에 --volume 을 반드시 준다. 밤밤 지시(2026-09-02): "다음부터 이메일 보낼따 무조건 추적을 켜".

send_bulk.py --volume <호수> 를 주면 오픈 픽셀과 클릭 추적 링크가 자동 주입된다. 안 주면 추적 없이 나가고, 한 번 나간 메일은 소급해서 측정할 방법이 없다. 실제로 2026-09-02에 --volume 을 빼고 53명에게 보내 오픈·클릭을 영영 못 재게 됐다.

호수 값 규칙:

  • 기수 모집·독려 메일 → 기수 라벨 (7gi, 8gi). 자동 리마인드 get100_7gi_notify.py 가 쓰는 값과 맞춘다
  • 뉴스레터 → vol12 형태
  • 같은 기수에서 세그먼트를 나눠 보내면 뒤에 붙여 구분한다 (7gi-nudge, 7gi-d3)

기록되는 곳은 구독자 DB의 오픈 횟수 · 최근 오픈일 · 최근 오픈 호수 · 클릭 횟수 · 최근 클릭일 · 최근 클릭 호수 다. 같은 사람이 같은 날 같은 호를 여러 번 열어도 중복 집계되지 않는다.

오픈율은 항상 과소집계된다. 지메일·네이버가 이미지를 기본 차단하면 픽셀이 안 불린다. 성과 판단은 클릭 수를 기준으로 하고, 최종 지표는 기수 신청 DB의 신규 행이다.

1. 대상 추출 — 반드시 3중 제외 대조

구독자 DB 하나만 보고 거르면 샌다. 실제로 그렇게 해서 6월 신청자에게 오발송했다.

DBID용도
구독자<NOTION_DB_ID> (ds <NOTION_DB_ID>)후보 풀
기수 신청<NOTION_ID> (ds <NOTION_DB_ID>)전량 제외
멤버ds <NOTION_DB_ID>이메일 + 이름 제외

후보 조건: 광고성 수신 동의 = '__YES__' AND 구독 상태 NOT IN ('수신 거부','반송'). 세그먼트는 명단 구분 (사전알림 / 뉴스레터 구독 / 행사 신청)으로 나눈다.

제외 규칙

  1. 기수 신청 DB는 기수 필드가 비어 있는 과거 행까지 전량 제외. 날짜로 필터하면 놓친다(오승혜님 7기 결제완료를 그렇게 놓쳤다).
  2. 멤버 DB 이메일은 절반만 채워져 있다(2026-09 기준 20/42). 이메일 대조만으로 부족하니 이름으로도 대조한다. 이걸로 B 원장(5기·자문 클라이언트)·서진욱(1기)·김미란(1기)이 걸러졌다.
  3. 연결된 멤버 관계 필드는 전 행이 null이라 신뢰하지 않는다.
  4. 이름 부분 일치(소민 vs 백소민)는 일단 제외하고 사용자에게 알린다.
  5. 발송 전 최종 인원과 제외 사유별 명단을 보고하고 승인받는다.

맥미니 자동 리마인드 ~/Projects/getback/scripts/get100_7gi_notify.py가 이미 같은 제외를 한다. 수동 발송 전에 그 로직을 먼저 읽으면 빠르다.

2. 메일 작성

빌더: ~/Projects/getback/운영/emails/build_email.py + brand-template.html (플레이스홀더 HERO_LABEL HERO_HEADLINE NOTICE_BAR_BLOCK INTRO_BLOCK INFO_CARD_ROWS CUSTOM_SECTIONS CTA_* CLOSING_TEXT SIGNATURE_LINE* FOOTER_TEXT, 헬퍼 info_row() notice_bar())

세그먼트마다 인트로와 푸터를 같이 바꾼다. 사전알림용 문구를 광고동의 명단에 그대로 보내면 "사전알림 신청한 적 없는데"가 된다. 한 문장을 고치면 같은 내용이 반복되는 자리를 전부 grep할 것 (푸터·제목·동의 경로).

톤은 decisions.md 기준: 짧은 사실 확인 + 다음 단계. 과한 정성 연출 금지. "이런 분께는 권하지 않습니다" 같은 필터 블록은 밤밤 선발 기준과 맞아 유효하다.

3. 품질 게이트 (우회 금지)

send_bulk.py가 H1~H11을 강제하고 --test에도 걸린다. 자주 걸리는 둘:

  • H3 형광펜 8개 이상 — <span style="background:#d4f000;padding:1px 5px;font-weight:700;">…</span>. 숫자·핵심 사실에 건다.
  • H4 이미지 2장 이상 — src="cid:이름" 으로 넣고 emails/img/이름.jpg 에 파일을 둔다. get100.co.kr 실사진 재사용이 자연스럽다 (마케팅/get100-website-personal/dist/assets/ 의 community-networking-party-*, home-proof-operation-*).

나머지 게이트(em-dash·부정대조·최상급·금칙어)는 밤밤 카피 규칙을 그대로 지키면 통과한다.

수신자 CSV 파일명에 opt-in 표시가 없으면 차단된다. -optin -ad-recipients -consent -agreed 중 하나 필수. 형식은 헤더 없이 이름,이메일, 이름이 없으면 안녕하세요.

4. 발송

cd ~/Projects/getback/운영/emails
# 1) 본인 테스트 — 실제 받는 모습 확인
python3 send_bulk.py --html <절대경로>.html --subject "[미리보기] (광고) …" \
  --volume 7gi-nudge --test you@example.com
# 2) 승인 후 실발송 (--volume 절대 빼지 말 것)
python3 send_bulk.py --html <절대경로>.html --subject "(광고) …" \
  --volume 7gi-nudge --recipients <이름>-optin.csv

발송 명령을 만들었으면 실행 전에 --volume 이 들어갔는지 눈으로 확인한다.

  • 광고성 메일은 제목에 (광고) 표기 (정보통신망법 제50조, 기존 관행과 일치).
  • 푸터에 수신거부 안내: 수신거부·문의는 본 메일에 회신해 주세요. · GET100
  • 발송 간격 1.2초, 인라인 CID는 multipart/related로 나간다.
  • 네이버메일은 발송취소가 안 된다. 문구를 고쳤으면 발송 전에 전문을 덤프해 눈으로 읽고 승인받는다.

전문 확인용 덤프:

python3 -c "import re;h=open('파일.html').read();h=re.sub(r'<br\s*/?>','\n',h);h=re.sub(r'</(p|div|tr|li|h1)>','\n',h);print('\n'.join([l.strip() for l in re.sub(r'<[^>]+>','',h).split('\n') if l.strip()]))"

5. 발송 후

  • 다음 날 오픈·클릭을 집계한다. 구독자 DB에서 최근 오픈 호수 또는 최근 클릭 호수 가 이번 호수와 같은 행을 세면 된다. 클릭 수를 먼저 보고, 오픈 수는 참고로만 읽는다.
  • 반송은 SMTP 250만 믿지 말고 IMAP 보낸편지함 통수 대조 + 받은편지함 반송 스캔까지 한다 (naver-mail-imap 스킬). 맥미니 com.get100.bounce-watch 로그는 멈춰 있을 수 있으니 상태를 먼저 확인한다.
  • 구독자 DB 메모에 [YYYY-MM-DD] <발송명> 발송 마커를 남긴다. 단 rich_text는 1,900자 상한이라 긴 메모는 append가 조용히 실패한다. 마커 개수와 IMAP Sent Messages 통수를 대조해 누락을 잡는다.
  • 자동 리마인드 잡과 겹치는지 확인한다. plist는 맥미니 ~/Library/LaunchAgents/com.get100.7gi-notify-*. 꺼져 있어도 .disabled-<타임스탬프> 로 남아 있으니 파일명으로 상태를 확인하고, 기억이 아니라 plist의 StartCalendarInterval로 실제 예정일을 읽는다.

함정 모음

  • 기수 전환 시 api/lead.js의 CURRENT_COHORT와 apply.html의 hidden cohort 필드를 둘 다 올린다. 신청 확인 메일 템플릿도 같이 본다.
  • 참가비는 소비자 노출을 **총액(부가세 포함)**으로 통일한다. 한 기수만 표기를 바꾸면 인상이 인하로 읽힌다.
  • 커뮤니티 페이지의 누적 멤버 수와 멤버 DB 행 수가 다를 수 있다(45 vs 42). 확정 못 하면 숫자를 빼고 쓴다.

Signals

GitHub stars
368
Forks
88
Last commit
Sep 2026
Advanced
Item type
skill
Key
getback-recruit-mail
Source
github.com/bam-bam-2/solo-skills