Gmail API를 사용하여 여러 회사에 후원 요청 메일을 자동으로 발송하는 Python 스크립트입니다.
공통 후원기획서 PDF와 홍보 PPT를 첨부하고, HTML 메일 템플릿을 사용하여 회사명/담당자/이메일이 자동으로 치환된 메일을 발송합니다.
# 의존성 설치
pip install -r requirements.txt
# 초기 설정 (첨부 파일 준비)
./install.sh# credentials.json을 프로젝트 루트에 저장한 후
python quickstart.py브라우저가 열리면 Google 계정으로 로그인 및 권한 승인하면 token.json이 자동 생성됩니다.
companies.csv 파일을 생성하고 헤더를 포함한 CSV 형식으로 작성합니다.
가능한 컬럼 이름(대소문자 무시, 일부 예시):
- 회사 이름:
company,회사,기업명 - 받는 이메일(회사 측):
to,to_email,company_email,회사이메일,기업이메일,email,메일,이메일
(여러 개일 경우 쉼표(,)로 구분하면, 모든 주소로 메일이 발송됩니다.) - 우리 쪽 담당자 이름:
person,담당자,담당자이름,담당자명 - 우리 쪽 담당자 이메일:
person_email,담당자이메일,담당자메일
예시 (companies.csv):
company,to,person,person_email
네이버,naver@example.com,홍길동,hong@our-org.com
카카오,kakao@example.com,김영희,kim@our-org.compython run-for-companies.py companies.csv완료! 각 회사별로 공통 후원기획서 PDF + 홍보 PPT가 첨부되고,
회사명/담당자/이메일이 치환된 메일이 자동으로 발송됩니다.
설정 방법:
- Google Cloud Console 접속
- 새 프로젝트 생성 또는 기존 프로젝트 선택
- "API 및 서비스" > "사용자 인증 정보"로 이동
- "사용자 인증 정보 만들기" > "OAuth 클라이언트 ID" 선택
- 애플리케이션 유형: "데스크톱 앱" 선택
- 생성된 JSON 파일을
credentials.json으로 이름 변경하여 프로젝트 루트에 저장
참고: credentials.json.example 파일을 참고하세요. 실제 사용을 위해서는 Google Cloud Console에서 받은 파일로 교체해야 합니다.
python quickstart.py 실행 시 자동으로 생성됩니다. 한 번 생성하면 재사용 가능하며, 만료 시 자동으로 갱신됩니다.
형식: 헤더 포함 CSV 파일
예를 들어:
company,to,person,person_email
네이버,naver@example.com,홍길동,hong@our-org.com
카카오,kakao@example.com,김영희,kim@our-org.com
라인,line@example.com,이철수,lee@our-org.com메일 본문 HTML 템플릿 파일입니다.
특수 변수 (자동 치환):
@회사@→ 회사 이름@담당자@→ 담당자 이름@이메일@→ 담당자 이메일
예시:
<p>안녕하세요, @회사@ @담당자@님께</p>
<p>후원 관련하여 메일드립니다. 회신은 @이메일@ 로 부탁드립니다.</p>메일에 첨부할 파일들을 attachments/ 디렉토리에 저장하세요:
2026 겨울 신촌지역 대학교 프로그래밍 동아리 연합 홍보 자료 PPT.pdf(PDF, 공통 첨부)ICPC Sinchon 후원 기획서.pdf(공통 후원기획서, 담당자 미지정일 때 사용)ICPC Sinchon 후원 기획서_홍길동.pdf,ICPC Sinchon 후원 기획서_김영희.pdf처럼
ICPC Sinchon 후원 기획서_담당자이름.pdf형식으로 우리 쪽 담당자별 후원기획서를 둘 수 있습니다.
주의 (메일에 보이는 파일 이름)
- 실제 파일 이름이
ICPC Sinchon 후원 기획서_홍길동.pdf여도,
메일에 첨부될 때 보이는 이름은 자동으로ICPC Sinchon 후원 기획서.pdf로 바뀝니다.
(언더바_뒤의 담당자 이름은 표시용 파일명에서 제거됩니다.)
- ✅ 의존성 설치:
pip install -r requirements.txt - ✅ Gmail API 인증 설정:
credentials.json준비 →python quickstart.py실행 - ✅ 템플릿 파일 준비:
mail.html작성 (@회사@,@담당자@,@이메일@사용) - ✅ 회사 목록 준비:
companies.csv작성 - ✅ 첨부 파일 준비:
attachments/디렉토리에 홍보 PPT 저장, 프로젝트 루트에 공통 후원기획서 PDF 저장 - ✅ 초기화:
./install.sh실행 - ✅ 메일 발송:
python run-for-companies.py companies.csv
- 📧 Gmail API를 통한 대량 메일 자동 발송
- 🎨 HTML 템플릿을 사용한 개인화된 메일 본문 (회사/담당자/이메일 자동 치환)
- 📎 공통 후원기획서 PDF 및 홍보 PPT 자동 첨부
증상: 인증 실패 또는 권한 오류
해결 방법:
credentials.json이 올바른지 확인token.json이 존재하는지 확인- Google Cloud Console에서 Gmail API가 활성화되어 있는지 확인
증상: FileNotFoundError 발생
해결 방법:
- 모든 필수 파일이 올바른 경로에 있는지 확인
sponsorship-proposal-documents/mail.html경로 확인 (⚠️ mail/mail.html아님)install.sh를 실행했는지 확인
증상: 회사명/담당자/이메일이 잘못 파싱됨
해결 방법:
companies.csv파일 형식 확인: 헤더 포함 CSV인지, 회사/담당자/이메일 컬럼 이름이 올바른지 확인- 각 셀 앞뒤의 공백은 자동으로 제거됩니다
sprayer/
├── attachments/ # 첨부 파일 디렉토리
├── sponsorship-proposal-documents/
│ └── mail.html # 메일 HTML 템플릿
├── companies.csv # 회사 목록 (CSV)
├── credentials.json # Gmail API 인증 정보
├── token.json # Gmail API 토큰 (자동 생성)
├── quickstart.py # Gmail API 인증 초기화
├── run-for-companies.py # 메인 실행 스크립트
├── send_mail.py # 메일 발송 함수
├── build_tex.py # (선택) LaTeX PDF 생성 함수
└── utils.py # 유틸리티 함수
MIT License