Skip to content

Repository files navigation

daum-to-gmail

다음(Daum) 메일함을 주기적으로 폴링해서 새로 도착한 메일을 Gmail 받은편지함(Inbox)에 실제 받은 메일처럼 넣어주는 서버입니다.

  • Daum 메일 수신: IMAP
  • Gmail 전달: Gmail API messages.insert 로 받은편지함에 직접 삽입 (원본 발신자/제목/날짜 유지, 안읽음 처리)
  • 실행 방식: 주기적 폴링 (기본 2분)

1. 설치

cd daum-to-gmail
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

2. Daum 메일 IMAP 설정

  1. Daum 메일 웹사이트 → 설정 → POP3/IMAP 설정에서 IMAP 사용을 켭니다.
  2. 앱 비밀번호(또는 IMAP 전용 비밀번호)를 발급받습니다. (일반 로그인 비밀번호는 IMAP에서 거부될 수 있습니다.)
  3. .env 파일에 DAUM_EMAIL, DAUM_APP_PASSWORD 를 채워 넣습니다.

3. Gmail API 인증 설정

  1. Google Cloud Console에서 새 프로젝트를 만듭니다.
  2. "API 및 서비스 → 라이브러리"에서 Gmail API 를 활성화합니다.
  3. "API 및 서비스 → OAuth 동의 화면"을 구성합니다. 게시 상태를 "테스트"로 두지 말고 "프로덕션"으로 게시하세요. 테스트 상태로 두면 발급된 refresh token이 7일 뒤 만료되어, 무인으로 오래 돌리는 서버에서는 일주일 뒤부터 조용히 전달이 멈춥니다. 개인 사용 목적으로 게시해도 별도 심사 없이 바로 적용됩니다.
  4. "API 및 서비스 → 사용자 인증 정보 → 사용자 인증 정보 만들기 → OAuth 클라이언트 ID"에서 애플리케이션 유형을 데스크톱 앱으로 선택해 생성합니다.
  5. 다운로드한 JSON 파일을 daum-to-gmail/client_secret.json 으로 저장합니다.
  6. 아래 명령을 실행하면 브라우저가 열리고, 로그인/동의 후 token.json 이 생성됩니다.
python oauth_setup.py

4. 실행

python main.py
  • 최초 실행 시에는 과거 메일을 모두 넣지 않도록, 실행 시점 이후에 도착하는 메일부터 전달합니다.
  • 어떤 메일까지 처리했는지는 state.json 에 저장되며, 서버를 재시작해도 중복 전달되지 않습니다.
  • 새 메일이 오면 제목 앞에 [Daum] 을 붙이고, 원본 발신자/날짜/본문을 유지한 채로 Gmail 받은편지함에 안읽음 상태로 삽입합니다.
  • 실행 중 로그는 콘솔과 함께 프로젝트 폴더의 daum_to_gmail.log 파일에도 남습니다 (5MB씩 최대 4개 순환 보관). 서비스로 조용히 돌아가는 중 문제가 생겼는지 확인할 때 이 파일을 먼저 확인하세요.
  • Daum IMAP 접속 실패, Gmail 인증 실패 등 일시적인 오류는 자동으로 다음 폴링 주기에 재시도합니다.

5. Windows에서 재부팅해도 자동 실행되는 서비스로 등록

NSSM을 쓰면 일반 프로그램을 Windows 서비스로 등록할 수 있습니다. 부팅 시 자동 시작되고, 프로세스가 죽어도 자동으로 재시작됩니다.

  1. NSSM을 다운로드해 압축을 풀고, nssm.exe 를 PATH에 추가하거나 해당 폴더에서 명령을 실행합니다.
  2. 관리자 권한 명령 프롬프트(PowerShell)에서 서비스를 등록합니다. C:\path\to\daum-to-gmail 은 실제 프로젝트 경로로 바꿉니다.
nssm install DaumToGmail "C:\path\to\daum-to-gmail\venv\Scripts\pythonw.exe" "main.py"
nssm set DaumToGmail AppDirectory "C:\path\to\daum-to-gmail"
nssm set DaumToGmail AppExit Default Restart
nssm set DaumToGmail Start SERVICE_AUTO_START
nssm start DaumToGmail
  • AppExit Default Restart: 프로세스가 어떤 이유로든 종료되면 자동 재시작합니다.
  • Start SERVICE_AUTO_START: Windows 부팅 시 로그인 여부와 상관없이 자동 시작합니다.
  • 로그는 표준출력이 파일로 남지 않으므로, 필요하면 nssm set DaumToGmail AppStdout "C:\path\to\daum-to-gmail\service.log"AppStderr 도 같은 파일로 지정해두면 좋습니다.
  • 서비스 제거: nssm remove DaumToGmail confirm
  • 서비스 상태 확인/중지: nssm status DaumToGmail, nssm stop DaumToGmail

NSSM 설치가 부담스러우면 Windows 기본 작업 스케줄러로도 비슷하게 만들 수 있습니다 (단, 크래시 시 자동 재시작은 GUI에서 "실패 시 다시 시작" 옵션을 별도로 켜야 합니다).

schtasks /create /tn "DaumToGmail" /tr "\"C:\path\to\daum-to-gmail\venv\Scripts\pythonw.exe\" \"C:\path\to\daum-to-gmail\main.py\"" /sc onstart /ru SYSTEM /rl highest

제한 사항

  • messages.insert 는 SPF/스팸 검사를 거치지 않고 그대로 받은편지함에 들어가므로, 원본 발신자 표시를 그대로 유지합니다 (실제로 그 주소에서 보낸 것은 아님에 유의).
  • 계속 실행되어야 하므로 서버/PC를 상시 켜두거나, systemd/pm2/cron 또는 위 Windows 서비스 등록 방법으로 상주 프로세스로 등록하는 것을 권장합니다.
  • IMAP UIDVALIDITY 변경(메일함 재구성 등 드문 서버 이벤트)은 감지하지 않습니다. 발생 시 last_uid 기준이 어긋나 메일이 중복되거나 누락될 수 있습니다 (매우 드문 케이스).
  • state.json 이 손상되면(정전 등으로 인한 것이 아니어도) 자동 복구하지 않고 에러를 남긴 채 재시도를 반복합니다. 로그에서 이 메시지가 보이면 파일을 직접 확인해야 합니다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages