SES 발송 + 답장을 회사 Gmail로 받기
"자체 메일로 실시간 현황 조사" 성향과 SES 대량발송을 양립시키는 법 · steelbrotech.com
TL 요약
- 가능하다. SES로 발송해도 답장은 100% 회사 Gmail로 받을 수 있음 —
Reply-To헤더로 From(발송 도메인)과 답장 수신처를 분리. 코드 이미 지원. - 못 바꾸는 것 1가지 — 발송
From은 SES 인증 도메인(send.steelbrotech.com)이어야 함. From을 Gmail로 위장하면 DMARC fail → 스팸. "발송=SES, 답장=Gmail"은 정상 조합. - 진짜 쟁점 — 답장이 Gmail로 직행하면 앱이 답장을 못 봄 → 답장률 통계·시퀀스 자동중단·자동응답 무력화(같은 사람에게 계속 발송 사고).
1 지금도 일부 답장은 Gmail에 도착 중
reply-arrival-email.service.ts:95 가 답장 도착 시 담당자 이메일로 SES 알림을 자동 발송. 회사 Gmail을 워크스페이스 오너 이메일로 두면 AI가 분류한 중요 답장은 지금도 옴.
| 답장 유형 | 현재 Gmail 도달 | 형태 |
|---|---|---|
| positive_interest / meeting_request | ✅ 이미 됨 | "🎉 OO님이 긍정 답장" 알림 메일 |
| wrong_contact | ✅ 자동 전달 | 담당자 변경 자동 forward |
| out_of_office | 시스템 처리 | 복귀일 재발송(알림 아님) |
| 그 외 일반 답장 원문 전체 | ❌ 안 감 | 앱 받은편지함에만 존재 |
→ 회사가 원하는 "오는 답장 전부를 Gmail에서"는 일반 답장 원문 포워딩이 빠진 상태.
2 3가지 구성 비교
| 구성 | 동작 | Gmail 실시간 | 앱 답장추적¹ | 개발량 | 평판·회신 정합성 |
|---|---|---|---|---|---|
| A. Reply-To = 회사 Gmail (직배) | 답장이 Gmail로 직행 (MX=Gmail) | ✅ 완벽 | ❌ 못 봄 | 0 (이미 지원) | 양호 |
| ★ B. 앱 수신 후 Gmail 포워딩 | 답장→SES→DB(통계·중단)→Gmail로 원문 forward | ✅ 전체 원문 | ✅ 유지 | 작음(1블록) | 최상 |
| C. 회사 Gmail을 Unipile 연결 | 답장 Gmail 직행 + inbox-poll로 앱이 캡처 | ✅ 완벽 | ✅ poll 지연 | 0~소(연결 유지) | 양호 |
¹ 답장률 통계 · 답장 시 시퀀스 자동중단 · 자동응답 트리거
3 추천: B안 — 앱 1차 수신 후 Gmail 포워딩
흐름
바이어 답장 →
바이어 답장 →
From: send.steelbrotech.com 의 MX → SES inbound → S3 → 앱 DB 기록(direction=inbound, 통계·시퀀스중단) → 회사 Gmail로 원문 포워딩(replyTo=바이어주소) → 회사가 Gmail에서 "답장" → 바이어에게 직접 회신 → 그 회신도 다시 앱 파이프라인으로
webhook.service.ts 의 inbound 저장 직후 한 블록 추가:
// inbound 저장 후 (webhook.service.ts ~516줄 직후) await emailService.sendEmail({ fromEmail: config.ses.senderEmail, // SES 도메인 toEmail: ownerGmail, // 회사 Gmail subject: `[답장] ${inbound.subject}`, bodyHtml: inbound.bodyHtml, replyTo: inbound.fromEmail, // ★ 바이어 주소 → Gmail에서 바로 회신 provider: "ses", })
- 왜 최상인가 — 앱이 답장을 1차로 받아 자동화(시퀀스 중단·통계·자동응답)를 살리면서, 전체 답장 원문을 회사 Gmail로 보냄. 회사의 "내 메일로 실시간 현황 조사" 성향을 100% 충족하면서 앱 데이터도 온전.
- 회신 정합성 —
replyTo=바이어주소라 회사가 Gmail에서 바로 답장 가능하고, 그 회신이 다시 SES inbound로 들어와 스레드가 끊기지 않음.
4 코드 근거
| 메커니즘 | 위치 |
|---|---|
| From / Reply-To 분리 | ses-email.service.ts:113 (ReplyToAddresses), email.service.ts:1012 |
| 답장 수신 파이프라인 | ses-inbound-consumer.worker.ts → processInboundEmail → emails(direction=inbound) + email_replies |
| 답장 시 자동화 | webhook.service.ts:1152 — lead_status=replied + enrollment 중단 + reply automation |
| 중요 답장 알림(현재 Gmail 도달) | reply-arrival-email.service.ts:95 (담당자 이메일로 SES 발송) |
| Gmail poll 캡처(C안) | unipile-inbox-poll.worker.ts (provider=unipile 계정만) |
| 계정 단위 고정 Reply-To 컬럼 | 없음 — 워크스페이스/계정 설정 추가 또는 per-send 주입 필요 |
5 결론
SES를 꺼릴 이유가 없다 — 발송은 SES, 답장은 전부 Gmail로 받게 만들 수 있다.
회사의 "자체 메일 실시간 확인" 성향은 SES와 충돌하지 않음. B안(앱 1차 수신 → Gmail 원문 포워딩, replyTo=바이어)이면 SES 대량발송 평판 + Gmail 실시간 확인 + 앱 답장추적을 모두 만족. 실작업은 ① 포워딩 1블록 ② 회사 Gmail 주소 설정값 1개뿐.