# NAVER WORKS → Slack 연동 [3/3] 콜드메일 리스트업

## 날짜: 2025-09-19
## 작성자: Claude (51123 서버 관리자)
## 관련 서비스: rb8001, skill-email, skill-slack(선택)
## 상태: 미구현 (02 문서 변경사항 반영)

## 관련 문서
- [1/3 기본 구성](./250919_naverworks_slack_01_base_configuration.md)
- [2/3 일일 브리핑](./250919_naverworks_slack_02_daily_briefing.md)

---

## 1. 콜드메일 리스트업 개요

### 목적
스타트업 콜드메일을 자동으로 수집하여 Slack 리스트 형식으로 전달

### 핵심 기능
- 콜드메일 패턴 감지 (발신자 도메인, 제목 키워드)
- 구조화된 리스트 생성 (회사명, 담당자, 제안내용)
- 첨부파일 정보 표시
- Slack 지정 채널 자동 포스팅

---

## 2. 구현 방식

### 2.1 트리거 방식 (권장: 푸시 알림)
- **현재 계획**: 주기적 폴링
- **권장 변경**: NAVER WORKS 푸시 알림
  - Developer Console에서 Webhook URL 등록
  - 새 메일 수신 시 즉시 알림
  - API 호출 최소화

### 2.2 처리 흐름 (현행 기준 + 계획)
1. 새 메일 수신 이벤트 발생 (또는 주기적 체크)
2. rb8001이 skill-email 호출
   - 현행: GET `/messages?provider=naverworks&user_id={UUID}&limit=100` 후 클라이언트(receivedTime) 기준 24시간 필터
   - 계획: POST `/cold-mail-list` (필터·구조화까지 일괄 처리)
3. 콜드메일 필터링/구조화
   - 현행: rb8001에서 키워드/도메인 기반 필터 후 목록 구성
   - 계획: skill-email 내부 `filter_cold_mails()`로 위임
4. Slack 포맷팅 후 전송
   - 현행: rb8001이 Block Kit 직접 구성 후 전송(WebClient)
   - 계획: skill-slack POST `/format-cold-mail`로 포맷 위임
5. 전송 대상: 네이버웍스 등록 사용자 DM(기본) — 필요 시 전용 채널 옵션

---

## 3. 콜드메일 필터링 규칙

### 3.1 발신자 도메인 패턴
```python
COLD_MAIL_DOMAINS = [
    "*.vc",           # VC 도메인
    "*capital.com",   # 투자사
    "*ventures.com",  # 벤처 캐피털
    "*startup.com"    # 스타트업
]
```

### 3.2 제목 키워드
```python
COLD_MAIL_KEYWORDS = [
    "투자", "제안", "협업", "파트너십",
    "investment", "proposal", "partnership"
]
```

---

## 4. 구현 파일 구조

### skill-email 현황/계획
- 현행: GET `/messages`로 NAVER WORKS 메일 조회 (날짜 파라미터 미지원 → 클라이언트 필터 필요)
- 계획:
  - `routers/naverworks_mail.py`: POST `/cold-mail-list` 엔드포인트
  - `services/naverworks_mail_service.py`: `filter_cold_mails()`
  - `schemas/naverworks_schemas.py`: ColdMailRequest/Response
  - (선택) `models/repositories`로 캐시 테이블 분리

### skill-slack 현황/계획
- 현행: 전용 포맷터 엔드포인트 없음 (rb8001이 직접 Block Kit 구성)
- 계획: POST `/format-cold-mail` — 테이블 Block Kit(회사명 | 담당자 | 제안 | 첨부)

### rb8001 오케스트레이션
- 콜드메일 감지 시 skill-email에서 데이터 조회 → (현행) rb8001이 필터/포맷 → Slack 전송
- 라우팅: 기본은 등록 사용자 DM, 필요 시 전용 채널 라우팅 옵션화

---

## 5. 구현 체크리스트

### 5.1 skill-email 구현
- [ ] 응답 후 receivedTime 기준 클라이언트 필터 구현(타임존/RFC3339 주의)
- [ ] 콜드메일 필터링/패턴 매칭 알고리즘 (`filter_cold_mails()`)
- [ ] 메일 정보 구조화(회사/담당/제안/첨부)
- [ ] (선택) POST `/cold-mail-list` 일괄 처리 엔드포인트

- [ ] 네이버웍스 등록 사용자 조회(DB)로 대상자 결정
- [ ] skill-email `/messages` 호출 시 provider=naverworks만 전달(날짜 파라미터 제거), 클라이언트 필터 적용
- [ ] Block Kit 포맷/전송 (현행) 또는 skill-slack 포맷터 연계(계획)
- [ ] 라우팅 정책: DM 기본, 채널 옵션 지원

### 5.3 푸시 알림 설정 (권장)
- [ ] NAVER WORKS Webhook URL 등록
- [ ] 이벤트 수신 엔드포인트 구현
- [ ] 실시간 처리 로직

---

## 6. 보안 및 개선사항

### 6.1 정보 최소화
- **문제**: 메일 본문 전체 노출 위험
- **해결**:
  - 발신자, 제목, 회사명만 표시
  - 첨부파일은 파일명/크기만
  - 상세 내용은 원본 메일 링크

### 6.2 첨부파일 처리
- **문제**: 악성코드 위험
- **해결**:
  - 직접 다운로드 금지
  - "첨부파일 있음" 표시만
  - 파일 형식과 크기 정보만 제공

---

## 7. 예상 출력 형식

```
📨 새로운 콜드메일 (3건)
━━━━━━━━━━━━━━━━━━━━━━━━━━━
┌─────────────┬──────────┬─────────────────┬────────┐
│ 회사명      │ 담당자   │ 제안 내용      │ 첨부   │
├─────────────┼──────────┼─────────────────┼────────┤
│ ABC Ventures│ 김대표   │ 시리즈A 투자제안│ PDF 2개│
│ XYZ Capital │ 이과장   │ 협업 미팅 요청  │ -      │
│ 123 Startup │ 박매니저 │ 파트너십 제안   │ PPT 1개│
└─────────────┴──────────┴─────────────────┴────────┘
```
