Clacks
라이브레거시 계정을 위한 이메일 브리지
"메시지가 중요한 게 아닙니다. 그것을 보내는 것이 중요합니다."
— GNU Terry Pratchett
POP3 및 IMAP 이메일 계정을 Gmail에 연결하는 Symfony 기반 애플리케이션입니다. 레거시 이메일 서버를 폴링하고 메시지를 Gmail 받은편지함으로 안전하게 직접 전달합니다. 저장 없이, 지연 없이, 필터 및 규칙과 완벽하게 호환되는 원활한 전달만 제공합니다.
주요 기능
- POP3 & IMAP 지원
- ext-imap 의존성 없는 순수 PHP 소켓 기반 폴링
- Gmail API 통합
- 네이티브 필터 호환성을 위해 Gmail messages.import 사용
- 보안 패스스루
- 메일 본문은 곧바로 Gmail로 전달되며 저장되지 않습니다
- 다중 계정 관리
- 여러 레거시 계정을 하나 이상의 Gmail 대상에 연결
- AdminLTE 대시보드
- 계정 관리 및 모니터링을 위한 최신 웹 UI
기술 스택
사례 연구
- 문제
- 오래된 POP3·IMAP 계정의 메일을 Gmail로 가져와, Gmail 자체의 필터와 라벨, 스팸 분류가 처음부터 Gmail로 온 메일처럼 적용되게 하는 것.
- 제 역할
- 설계, 개발, 운영을 모두 맡고 있습니다. 메일 클라이언트, Gmail 연동, 자격 증명 암호화, 스케줄링, 유료 요금제까지.
- 제약
- 필요한 Gmail 권한은 모두 Google이 ‘제한됨’으로 분류합니다. 그래서 보안 심사를 거쳐야 하고, 요청하는 권한마다 그 필요성을 설명해야 합니다. 또한 남의 메일을 다루는 서비스라면 보관하는 것을 최대한 줄여야 합니다.
- 결정
- 전달이 아닌 가져오기: 메일은 Gmail의 messages.import로 들어가므로 필터와 스팸 분류가 평소처럼 동작합니다. 권한은 좁게 한정된 다섯 가지만 요청하고, gmail.readonly는 일부러 요청하지 않습니다. 애플리케이션은 기존 Gmail 메시지를 읽는 일이 없기 때문입니다. 메일 본문은 보관하지 않음: 메일은 한 번의 처리로 받아와 가져오며, 보관하는 것은 보낸 사람, 제목, 날짜, 중복 가져오기를 막는 식별자 같은 메타데이터뿐이고 이것도 보존 일정에 따라 삭제합니다. POP3·IMAP 클라이언트는 PHP의 IMAP 확장에 의존하지 않고 기본 소켓 위에 직접 작성했습니다. 반드시 저장해야 하는 비밀 정보 — 메일함 비밀번호와 Gmail 갱신 토큰 등 — 는 키 암호화 키로 암호화합니다.
- 트레이드오프
- 가져오기에는 제한된 권한이 필요하고, 그 권한에는 Google의 심사가 따릅니다. 전달 방식이었다면 둘 다 피할 수 있었지만, 애초의 목적이던 필터와 라벨이 망가졌을 것입니다.
- 결과
- 무료 및 유료 요금제를 갖추고 POP3·IMAP 계정을 하나 이상의 Gmail 받은편지함에 연결하는, 운영 중인 서비스.
- 근거
- 제한된 권한 하나하나를 그것을 사용하는 정확한 API 호출과 함께 문서화했으며, 공식 평가에 앞서 코드를 Google의 CASA Tier 2 기준에 비추어 점검했습니다.