발행일: 2026-10-06(화) 11:44
← 목차로 돌아가기|하루 30분 n8n 시리즈 ② 실무 자동화 레시피 100
RECIPE 081

이메일 첨부파일 자동 분류 → Google Drive 저장

  • ▸Gmail 수신 첨부파일을 파일 유형별로 자동 분류
  • ▸분류된 파일을 Google Drive 폴더에 자동 저장
  • ▸처리 결과를 Slack으로 일일 요약 보고

✅사전 준비

  • □Gmail OAuth2 자격증명 설정
  • □Google Drive 분류별 폴더 구조 생성 (이미지/문서/스프레드시트/기타)
  • □Slack 웹훅 URL 준비
  • □처리 제외할 발신자 목록 정의 (예: 뉴스레터 발신자)

Gmail Trigger + 첨부파일 추출

Node: Gmail Trigger
Event: Message Received
Filters:
  Has Attachment: true

// 첨부파일 MIME 타입별 분류 (Code 노드)
const mimeMap = {
  'application/pdf': '문서/PDF',
  'application/vnd.openxmlformats-officedocument.wordprocessingml.document': '문서/Word',
  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': '스프레드시트',
  'image/jpeg': '이미지',
  'image/png': '이미지'
};

const mimeType = $json.attachments[0].mimeType;
const folder = mimeMap[mimeType] || '기타';
return [{ json: { ...$json, targetFolder: folder } }];

Google Drive 폴더 ID 매핑

// Code 노드
const folderIds = {
  '문서/PDF': 'FOLDER_ID_PDF',
  '문서/Word': 'FOLDER_ID_WORD',
  '스프레드시트': 'FOLDER_ID_SHEETS',
  '이미지': 'FOLDER_ID_IMAGES',
  '기타': 'FOLDER_ID_OTHER'
};

const folderId = folderIds[$json.targetFolder] || folderIds['기타'];
return [{ json: { ...$json, folderId } }];

Google Drive 파일 업로드

Node: Google Drive (Upload File)
Folder ID: {{ $json.folderId }}
File Name: {{ $now.toFormat('yyyyMMdd') }}_{{ $json.attachments[0].name }}
Binary Property: attachment_0
💡 TIPGmail에서 첨부파일이 여러 개인 경우 SplitInBatches 노드로 하나씩 처리하면 각 파일을 개별 폴더에 정확히 저장할 수 있습니다.
⚡

워크플로우 JSON

아래 JSON을 복사해 n8n에 바로 임포트하세요

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "recipeId": "recipe081",
  "title": "카카오워크 알림 자동 발송",
  "chapter": 8,
  "category": "국내 서비스 특화 레시피",
  "difficulty": "⭐⭐",
  "estimatedTime": "30분",
  "usedApps": [
    "카카오워크 API"
  ],
  "description": "사내 메신저로 카카오워크를 사용하는 기업에서 어떤 트리거(Schedule, Gmail, Sheets 등)와도 연결해 카카오워크 채널로 자동 알림을 발송합니다. HTTP Request 노드로 카카오워크 Bot API를 직접 호출하는 방식입니다.",
  "apiGuide": {
    "platform": "카카오워크",
    "issueUrl": "kakaowork.com",
    "steps": [
      "카카오워크 관리자 콘솔(kakaowork.com) 접속",
      "앱 등록 메뉴에서 새 Bot 앱 생성",
      "Bot API 키 발급",
      "발송할 채널 또는 멤버 ID 확인"
    ]
  },
  "nodes": [
    {
      "id": "node1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "name": "원하는 트리거 설정",
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 * * *"
            }
          ]
        }
      }
    },
    {
      "id": "node2",
      "type": "n8n-nodes-base.httpRequest",
      "name": "카카오워크 메시지 발송",
      "parameters": {
        "method": "POST",
        "url": "https://api.kakaowork.com/v1/messages.send",
        "headers": {
          "Authorization": "Bearer {{$env.KAKAOWORK_API_KEY}}",
          "Content-Type": "application/json"
        },
        "body": {
          "conversation_id": "={{$env.KAKAOWORK_CHANNEL_ID}}",
          "text": "{{$env.MESSAGE_TEXT}}",
          "blocks": [
            {
              "type": "section",
              "text": "안녕하세요! n8n에서 자동 발송된 알림입니다.\n\n내용: {{$json['알림내용']}}\n시각: {{$now.format('MM월 DD일 HH:mm')}}"
            }
          ]
        }
      }
    }
  ],
  "envVariables": {
    "KAKAOWORK_API_KEY": "카카오워크 Bot API 키",
    "KAKAOWORK_CHANNEL_ID": "발송할 카카오워크 채널 또는 대화 ID",
    "MESSAGE_TEXT": "기본 알림 텍스트"
  },
  "tips": [
    "카카오워크 Bot API는 blocks 형식을 지원해요. 버튼·이미지·텍스트 카드 등 다양한 형태의 메시지를 만들 수 있어요.",
    "이 레시피는 Slack 노드 대신 HTTP Request 노드를 사용하는 패턴입니다. 어떤 레시피든 Slack 발송 부분을 이 노드로 교체하면 카카오워크 알림으로 전환할 수 있어요.",
    "발송 대상을 개인 DM으로 하려면 conversation_id를 해당 직원의 1:1 대화 ID로 설정하세요."
  ],
  "qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe081"
}
← 이전 레시피☰ 목차다음 레시피 →