• 1.1.0

    개인 이메일 수신 서버 1.1.0

    1.0.1 대비 휴대폰 화면과 메일 알림을 개선했습니다. 우측 하단에서 홈 화면 앱 설치와 알림을 등록하고, 앱을 닫은 상태에서도 지원 기기에서 새 메일 수신 사실을 확인할 수 있습니다.

    1.0.1 대비 변경사항

    • 반응형 메일함: 데스크톱 3단·태블릿 2단·모바일 목록/상세 전환. 모바일과 태블릿에 접이식 폴더/라벨 메뉴를 추가하고 터치 영역, 설정·검색 필터·첨부 화면, 노치 안전 영역과 포커스 복귀를 보완했습니다.
    • 우측 하단 설치·알림 안내: 하나의 카드에서 PWA 설치와 알림 상태를 안내합니다. ‘나중에’는 자동 안내를 7일간 접고, 입력 중이나 대화상자가 열리면 작은 버튼으로 전환합니다. 등록 완료·권한 거부·미지원·등록 실패를 구분합니다.
    • PWA: Manifest, 앱/Apple 터치 아이콘, 루트 Service Worker를 추가했습니다. 지원 브라우저에서는 설치 창을 열고 iPhone/iPad에는 홈 화면 추가 순서를 안내합니다. 메일·첨부·인증 응답은 캐시하지 않으며 오프라인에서는 연결 안내만 제공합니다.
    • Web Push: ‘새 메일이 도착했습니다’만 표시하고 발신자·제목·본문은 노출하지 않습니다. 알림 클릭 시 기존 창을 활성화하거나 메일함을 열고, 세션이 만료되면 패스키 로그인 후 해당 메일로 이동합니다.
    • 영속 발송 큐: 원문 저장과 DB 커밋에 맞춰 신규 메시지의 알림 작업을 기록하고 별도로 발송합니다. 재전송·추가 envelope·재처리에 중복 생성하지 않으며, 최대 5회/24시간 재시도와 만료 구독 정리를 지원합니다. Push 서비스 수락은 실제 기기 표시나 정확히 한 번 전달을 보장하지 않습니다.
    • 구독 보호와 복구: VAPID 키와 구독 정보를 기존 마스터키로 암호화합니다. 관리자 인증·Origin/CSRF를 유지하고 Push endpoint와 DNS 주소를 제한합니다. 세션 만료에는 알림이 유지되며 로그아웃 시 해당 기기, 관리자 인증 복구·백업 복원 시 모든 구독과 대기 작업을 해제합니다.
    • 검증·운영: 설정에 기기별 알림 해제를 추가하고 서버·Service Worker·반응형/설치 상태 시험을 확장했습니다. 비밀값 검사에 Manifest와 Service Worker를 포함하고 패키지·Compose 기본 이미지 태그를 1.1.0으로 올렸습니다.

    업데이트

    메일 데이터와 마스터키를 백업한 뒤 기존 .env의 IMAGE_TAG=1.1.0을 설정합니다. 기존 bind 경로는 유지합니다. 새 구독/큐 테이블은 시작 시 추가되며 기존 DB 이관·메일 보관은 유지됩니다. 추가 VAPID 환경변수나 외부 메시지 브로커는 필요하지 않습니다.

    docker compose pull
    docker compose up -d --no-build
    

    로그인 후 우측 하단에서 설치·알림을 등록하세요. iPhone/iPad는 홈 화면에 추가한 앱에서 알림을 켜야 합니다. 서버에서 지원 Push 제공자로 외부 HTTPS/443 연결이 필요하며 현재 발송 연결은 공인 IPv4를 사용합니다. 이미 Push 제공자에 전달된 알림은 로그아웃으로 되돌릴 수 없습니다.

    이미지와 검증

    • 이미지: git.2ex.dev/hanyul/cloudflare-email-webhook:1.1.0 (Linux amd64)
    • 고정 참조: git.2ex.dev/hanyul/cloudflare-email-webhook@sha256:8cd74db0f50d62e259e41598a90ded3b6c52e8dd9b8566b4fab26abde7c42540
    • 소스 커밋: 29749a4470a03b853ce35bc757420534a0f4b2c8
    • Windows 시험 19개 통과·Linux 전용 4개 건너뜀. 릴리즈 이미지 Linux 시험 23개 통과·실패/건너뜀 0. bind mount 재생성·강제 종료/재전송·백업 복구 통과.
    • UI lint/build, Chromium 가상 패스키·미리보기·다크모드·320~1440px 반응형과 설치/구독 상태 모의 시험, Compose 설정 검증 통과.
    • 새 앱 이미지 Trivy High/Critical 0건(2026-09-28 검사). 알려진 로컬 비밀값 2개 대조 결과 현재 번들·이미지 일치 0건. 기존 Git 이력 6개 객체 일치는 유지되므로 운영 웹훅 키 교체 필요성은 그대로입니다.
    • ClamAV는 기존 upstream stable-debian13-slim을 재사용하며 이번에 빌드·재게시·취약점 재검사하지 않았습니다. 1.0.1 당시 ClamAV 검사에서 기록한 High 55건·Critical 1건(고유 CVE 20개)은 과거 검사 결과이며 새 앱의 0건 결과와 합산하거나 해결된 것으로 표시하지 않습니다.

    미실행: 실제 Android/iPhone/Safari/Firefox의 Push 제공자 전달·잠금 화면 알림, 운영 NAS·Cloudflare Worker 배포 및 실제 외부 SMTP 수신. 설치/구독 UI와 서버 Push 전송은 로컬 모의 시험이며 운영 전환 완료를 의미하지 않습니다. Cloudflare 수신 Worker와 HMAC 프로토콜은 변경하지 않았습니다.

    전체 변경 · 운영 절차 · 검증 기록

    Downloads 2