Gmail · SMTP 자동 발송
워크플로의 결과를 "사람한테 알리는" 가장 흔한 길. Gmail 계정 또는 SMTP 서버 둘 중 하나 등록하면 평생 작동.
워크플로 어디선가 데이터를 만들거나 받았으면, 보통 "누군가에게 알림" 으로 끝납니다. 그게 Slack 이면 Ch.10, 메일이면 이 챕터. 메일은 두 길 — Gmail (개인 계정 OAuth) 또는 SMTP (회사 메일·SendGrid·Mailgun 같은 외부 SMTP).
Gmail vs SMTP — 어느 게 나에게 맞나
| 방식 | 장점 | 제약 |
|---|---|---|
| Gmail | OAuth 한 번이면 끝, 무료, 본인 계정에서 발송 | 하루 500통 한도, 회사 메일 안 됨 |
| SMTP | 발송량 제한 ↑, 자체 도메인 메일, 비즈니스용 | host·port·user·pass 4개 입력, 발송 한도 SMTP 서비스에 따름 |
| SendGrid·Mailgun | 월 100만 통+, 통계 대시보드, 도메인 인증 | 월 $15+, 도메인 SPF·DKIM 설정 필요 |
처음엔 Gmail 권장. 학습·소규모 자동화에 충분. 일 50통 이상 보내거나 회사 도메인이면 SMTP, 일 1만+ 면 SendGrid 같은 전용 서비스.
n8n 에는 메일 관련 노드 3종:
- Send Email — 일반 SMTP 발송. host·port·user·pass 입력.
- Gmail — Google OAuth, Gmail 계정 그대로.
- Email Trigger (IMAP) — 이건 받는 쪽. 메일 수신 감지.
1단계 — Gmail OAuth 자격증명
+ 클릭 → "gmail" 검색 → Gmail 노드. 패널의 Credential to connect with → Create new credential.
Ch.8 의 Google Sheets 와 정확히 동일한 절차. Cloud Console → APIs & Services → Credentials → OAuth client ID. Redirect URI 만 다르게 — /rest/oauth2-credential/callback 동일.
이미 Sheets credentials 이 있으면 같은 OAuth client 재사용 가능. n8n 안에서 "Gmail OAuth2" 라는 새 자격증명으로 만들되, Client ID·Secret 은 동일하게 입력.
Google Cloud Console 의 OAuth consent screen → Scopes 에 gmail.send (또는 gmail.modify 전체 권한) 추가. Sheets 만 등록한 상태면 메일 발송 권한이 없어서 "permission denied" 에러.
2단계 — 메일 보내기 실전
HTML 본문 템플릿:
표현식 안에서 역따옴표(`) 와 ${...} 조합을 쓰면 멀티라인 + 변수 삽입이 깔끔. 위 한 줄이 다음 노드 입력의 name·amount 값으로 채워집니다.
3단계 — 첨부파일 보내기
첨부는 두 가지 — ① 이전 노드의 binary 데이터 (예: HTTP Request 로 PDF 받은 거), ② n8n 내부 자체 파일.
Attachments 필드에 data 라고 적으면 n8n 이 이전 노드의 binary[data] 를 첨부로 사용. 여러 첨부면 콤마로 (data,data2,data3).
HTTP Request 노드의 Response → Download File 토글이 꺼져 있으면 데이터가 binary 가 아니라 JSON. Gmail 노드가 binary 만 첨부 인식하므로 실패. 다운로드 모드 켜기.
4단계 — 대량 발송 + 안전망
Gmail 은 일 500통 한도. 1,000 명에게 보내려면 SendGrid 같은 전용 서비스 또는 SMTP 릴레이 필요. n8n 워크플로에서는 동일 — 노드 종류만 바꿈.
발송 실패하면 Error Trigger 워크플로가 받음 (Ch.16). Error 발생 행은 Google Sheets 의 "발송실패" 컬럼에 마킹 → 다음 cron 에서 재시도. 이 패턴이 안정 운영의 핵심.
다음 Ch.10 — Slack · Discord 알림. 메일보다 즉시성 ↑ 인 채널. webhook URL 한 줄로 끝.