← 노드 한 장 전체#52 · Gmail
Gmail
테스트 메일, 정말 보냈는지 확인까지
이 글은 이런 분께Gmail 노드로 본인 테스트 메일을 보내고 실제 발송 메타와 제목·본문까지 확인하고 싶은 분

1분 영상은 @workflow.hanjang 에 순서대로 공개돼요
테스트 메일, 정말 보냈는지 확인까지.
노드 한 장 #52 · Gmail
먼저 결과부터
지정된 Gmail 계정의 profile을 먼저 확인하고 native Gmail Send로 본인 테스트 계정에 직접 작성한 고지 1통만 발송했어요. 실제 Send 결과는 1 item, SENT·INBOX·UNREAD 라벨이었고 그 메시지 ID만 Get한 뒤 제목·본문·수신자·발신자 일치를 별도 Code로 확인했어요. 주소와 식별자는 가렸고 일반 메일함·고객 메일은 읽지 않았어요. profile #74845, 실제 Send/Get 검증 #74848. 재발송 없음.
우리가 실제로 돌린 기록 · 실행 #74845·#74848 · 2026-10-30
우리가 실제로 돌린 기록 · 실행 #74845·#74848 · 2026-10-30
- 제목: [노드 한 장] Gmail 테스트
- Email Type: Text
- Append n8n Attribution: 꺼짐
- Send 재시도: 꺼짐
- 고객정보·이모지 없음
따라 하기
실제로 실행한 워크플로우를 바탕으로 정리했어요. 계정·식별자는 공개용 값으로 치환했고, 그 밖의 차이는 아래 주의사항에 표시했어요. n8n 캔버스에서 +를 눌러 노드를 순서대로 추가하고 같은 값을 넣으면 돼요. 빨간 제목이 이번 편의 주인공 노드예요. 표 왼쪽은 n8n 편집기에 보이는 칸 이름, 오른쪽은 다운로드 JSON의 설정값이에요. 직접 입력하기 번거로우면 JSON을 받아 ⋯ → Import from File로 가져오세요.
Step 1. Manual Trigger 노드 추가이름: Run manually
설정 없이 그대로 추가해요.
Step 2. HTTP Request 노드 추가이름: Verify Gmail profile only
| URL | https://gmail.googleapis.com/gmail/v1/users/me/profile |
| Authentication | Predefined Credential Type |
| Credential Type | gmailOAuth2 |
Step 3. Code 노드 추가이름: Guard own identity
| JavaScript | const expected='YOUR_TEST_EMAIL'; if($input.first().json.emailAddress!==expected)throw new Error('STOP: Gmail identity mismatch'); return [{json:{identity_verified:true,scope:'own test account only'}}]; |
Step 4. Gmail 노드 추가이름: Gmail Send exactly one
| Resource | Message |
| Operation | Send |
| To | YOUR_TEST_EMAIL |
| Subject | [노드 한 장] Gmail 테스트 |
| Email Type | Text |
| Message | 이 메일은 n8n Gmail 노드 실습용 테스트입니다. 본인 계정으로 한 번만 발송하며 실제 고객정보는 포함하지 않았습니다. |
| Options › Append n8n Attribution | 꺼짐 |
Step 5. Gmail 노드 추가이름: Gmail Get exact sent ID
| Resource | Message |
| Operation | Get |
| Message ID | {{ $json.id }} |
| Simplify | 꺼짐 |
| Options › Download Attachments | 꺼짐 |
Step 6. Code 노드 추가이름: Verify only own test content
| JavaScript | const j=$input.first().json;const expectedSubject="[노드 한 장] Gmail 테스트";const expectedBody="이 메일은 n8n Gmail 노드 실습용 테스트입니다.\n본인 계정으로 한 번만 발송하며 실제 고객정보는 포함하지 않았습니다.";const send=$('Gmail Send exactly one').first().json;const to=(j.to?.value||[]).map(x=>x.address);const from=(j.from?.value||[]).map(x=>x.address);const text=String(j.text||'').trim();const sent=(send.labelIds||[]).includes('SENT');return [{json:{sample:true,identity_verified:true,native_send_items:1,sent_label:sent,subject_matches:j.subject===expectedSubject,body_matches:text===expectedBody,recipient_is_own:to.includes('YOUR_TEST_EMAIL'),sender_is_own:from.includes('YOUR_TEST_EMAIL'),subject:j.subject,body:text,note:'직접 작성한 본인용 테스트 메일 · 해당 message ID만 조회'}}]; |
가져와서 쓸 때 확인할 것
- 지정된 기존 Gmail 자격 증명의 profile로 본인 계정을 확인한 뒤 본인 주소에만 테스트 1통을 발송했다.
- Message Send는 한 번만 실행했고 retryOnFail=false였다. 노드 이름이나 이 설정이 영구적인 중복 발송 방지 기능을 뜻하지 않으며 전체 워크플로우를 다시 실행하면 새 메일을 보낼 수 있다.
- Message Get은 Send가 반환한 정확한 자기 ID만 사용했고 Get Many나 일반 메일함 검색은 하지 않았다.
- Get의 Simplify=false로 실제 text 본문을 받아 직접 쓴 테스트 문안과 비교했다.
- Append n8n Attribution=false를 설정했고 이모지·고객정보 없는 직접 쓴 본문과 일치했다.
- 검증 boolean은 별도 Code가 계산했으며 Gmail Send 자체 검증 기능이 아니다.
- 네트워크가 모호하면 재발송하지 않는다. 받은 정확한 메시지 ID가 있으면 GET으로 대조하고, ID도 없으면 중단하고 확인한다.
- 공개 JSON에는 자격 증명·실제 주소·메시지 ID가 없으며 YOUR_TEST_EMAIL을 본인 테스트 주소로만 검토 후 채워야 한다.
- YOUR_… 표시를 내 값으로 바꾸고, 계정이 필요한 서비스 노드만 자격 증명을 연결하세요. 그런 칸이나 노드가 없는 예제는 추가 계정 없이 실행할 수 있어요.
노드의 모든 옵션은 n8n 공식 문서에서 볼 수 있어요.