Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Email Parser Template Workflow

이메일 첨부파일을 자동으로 수신, 분류, 파싱하여 데이터베이스에 저장하는 n8n 워크플로우입니다.

개요

이 워크플로우는 IMAP을 통해 수신된 이메일의 PDF 첨부파일을 처리합니다. 문서 유형을 자동 분류하고 OCR 및 AI 기반 파싱을 수행하여 구조화된 데이터로 변환합니다.

주요 기능

  • 이메일 수신: IMAP 프로토콜을 통한 실시간 이메일 모니터링
  • 첨부파일 처리: PDF 첨부파일 자동 추출 및 분리
  • 텍스트 추출: 내장 PDF 파서 + Upstage OCR API 지원
  • AI 문서 분류: OpenAI GPT-4.1-mini를 활용한 문서 유형 분류
  • 파일 저장: SFTP를 통한 파일 저장 (SHA256 해시 기반 파일명)
  • 데이터 저장: MySQL 데이터베이스 저장
  • 실시간 알림: Redis Pub/Sub을 통한 알림 발행

지원 문서 유형

카테고리 설명
bizlicense 사업자등록증
quotation 견적서
purchase_order 발주서
bank_statement 통장사본
contract 계약서 (용역, 공급, 유지보수 등)
other 기타 문서

워크플로우 구조

imap_trigger
    │
    ▼
if_attachements ──(첨부파일 없음)──> [종료]
    │
    ▼
split_attachments
    │
    ▼
filter_pdf ──(PDF 아님)──> [종료]
    │
    ▼
setup (gid, uid 설정)
    │
    ▼
extract_attachments
    │
    ├──────────────────────────────┐
    ▼                              ▼
hash_file                        loop
    │                              │
    ▼                              ▼
restore_binary_file1          extract_pdf
    │                              │
    ▼                              ▼
sftp (파일 업로드)             clean_text
    │                              │
    ▼                              ▼
mapping1                       if_ocr
    │                          ┌───┴───┐
    │                          ▼       ▼
    │                      [텍스트O] [텍스트X]
    │                          │       │
    │                          │   restore_binary_file
    │                          │       │
    │                          │   upstage_ocr
    │                          │       │
    │                          └───┬───┘
    │                              ▼
    │                          mapping
    │                              │
    └──────────────────────────────┘
                    │
                    ▼
               merge_info
                    │
                    ▼
              get_file_info (AI 분류/파싱)
                    │
                    ▼
               split_out
                    │
        ┌───────────┴───────────┐
        ▼                       ▼
convert_item_db          convert_item_redis
        │                       │
        ▼                       ▼
   insert_db              publish_redis

필요 조건

n8n 노드

  • Email Read IMAP
  • Code
  • If / Filter
  • Set
  • Extract From File
  • HTTP Request
  • FTP (SFTP)
  • Merge
  • MySQL
  • Redis
  • LangChain (Chain LLM, OpenAI Chat Model, Structured Output Parser)

외부 서비스

  • IMAP 이메일 서버: 이메일 수신용
  • Upstage API: OCR 처리 (Document Digitization API)
  • OpenAI API: 문서 분류 및 파싱 (GPT-4.1-mini)
  • SFTP 서버: 파일 저장
  • MySQL 데이터베이스: 메타데이터 저장
  • Redis 서버: 실시간 알림

설정 방법

1. Credentials 설정

n8n에서 다음 credentials를 설정해야 합니다:

  • IMAP: 이메일 서버 접속 정보
  • HTTP Bearer Auth: Upstage API 키
  • OpenAI API: OpenAI API 키
  • SFTP: 파일 서버 접속 정보
  • MySQL: 데이터베이스 접속 정보
  • Redis: Redis 서버 접속 정보

2. 데이터베이스 스키마

files 테이블이 필요합니다:

CREATE TABLE files (
    id INT AUTO_INCREMENT PRIMARY KEY,
    gid INT,
    uid INT,
    saleser VARCHAR(255),
    fname VARCHAR(255),
    hashed_fname VARCHAR(255),
    fpath VARCHAR(512),
    fsize BIGINT,
    format VARCHAR(50),
    category VARCHAR(50),
    parsed TINYINT,
    source VARCHAR(50),
    ocr_result LONGTEXT,
    parsing_result JSON,
    metadata JSON,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3. 파일 저장 경로

SFTP 서버에 다음 디렉토리 구조가 필요합니다:

/data/saleser/files/{gid}/_email/

출력 데이터 구조

MySQL 저장 데이터

{
  "gid": 1,
  "uid": 0,
  "saleser": "",
  "fname": "견적서_2024.pdf",
  "hashed_fname": "a1b2c3d4...xyz.pdf",
  "fpath": "/data/saleser/files/1/_email/a1b2c3d4...xyz.pdf",
  "fsize": 123456,
  "format": "pdf",
  "category": "quotation",
  "parsed": 1,
  "source": "email",
  "ocr_result": "문서 전체 텍스트...",
  "parsing_result": {
    "documentType": "quotation",
    "parsedData": {
      "project": "프로젝트명",
      "name": "발행업체명",
      "recv": "수신업체명",
      "date": "2024-01-15",
      "total": 11000000,
      "items": [...]
    }
  },
  "metadata": "{\"sender\":\"sender@example.com\",\"receiver\":\"receiver@example.com\"}"
}

Redis 알림 메시지

채널: noti:group:{gid}:email

{
  "gid": 1,
  "type": "email",
  "title": "이메일 제목",
  "message": "이메일 본문",
  "data": "[...파싱된 첨부파일 배열...]",
  "timestamp": "2024-01-15 10:30:00"
}

에러 처리

  • PDF 텍스트 추출 실패: Upstage OCR API로 자동 전환
  • OCR 실패: parsed: 0, category: "other"로 저장
  • AI 파싱 실패: 기본 "other" 카테고리로 분류

라이선스

MIT License

About

Parse emails and extract attachments for automated n8n workflows.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors