Skip to main content

Email-to-EML Secure Archiver

Project description

Email-to-EML Secure Archiver (EESA)

A Python-based command-line utility to programmatically retrieve emails from Gmail and Microsoft 365 and save them as RFC822-compliant .eml files.

โœจ Features

  • ๐Ÿ” Secure OAuth2 Authentication - Browser-based authentication with 2FA support
  • ๐Ÿ“ง Multi-Provider Support - Gmail and Microsoft 365 (Outlook)
  • ๐Ÿง  AI-Powered Classification - Automatically categorize emails and skip promotions (v0.3.0+)
  • ๐Ÿ“Š Advanced Extraction - Extract structured data like summaries, action items, and invoices (v0.5.0+)
  • ๐Ÿ–ฅ๏ธ Premium Web UI - Optional dashboard with high-end dark mode and real-time stats (v0.6.0+)
  • ๐Ÿ  Local LLM Support - Connect to Ollama, LM Studio, or llama.cpp (v0.4.0+)
  • ๐Ÿ” Advanced Filtering - Date-based, incremental sync, custom queries
  • ๐Ÿช Webhook Integration - Automatically send downloaded emails to webhook endpoints
  • ๐Ÿ’พ Incremental Checkpointing - Resume interrupted downloads
  • ๐Ÿ“ฆ Modern Package Management - UV/UVX support for easy installation and execution

๐Ÿš€ Quick Start

Installation

Using uvx (recommended - no installation needed):

# To run the CLI
uvx email-archiver --help

# To run the Web UI (installs optional dependencies automatically)
uvx --with email-archiver[ui] email-archiver --ui

Using pip:

# For CLI only
pip install email-archiver

# For CLI + Web UI
pip install "email-archiver[ui]"

From source:

git clone https://github.com/therealtimex/email-archiver
cd email-archiver
uv sync
uv run email-archiver --help

Basic Usage

# Launch the Web Dashboard
email-archiver --ui

# Download emails from Gmail since a specific date
email-archiver --provider gmail --since 2024-12-01

# Incremental sync (resume from last checkpoint)
email-archiver --provider gmail --incremental

# AI Classification (OpenAI)
email-archiver --provider gmail --classify --openai-api-key "sk-..." --skip-promotional

# AI Classification (Local LLM via Ollama)
email-archiver --provider gmail --classify --llm-provider ollama --model "llama3"

# With webhook integration
email-archiver --provider gmail --since 2024-12-23 \
  --webhook-url https://your-webhook.com/endpoint \
  --webhook-secret "Bearer your-token"

๐Ÿ“– Documentation

๐ŸŽฏ Common Use Cases

Daily Email Backup

email-archiver --provider gmail --incremental

Archive Specific Emails

# Emails with attachments
email-archiver --provider gmail --query "has:attachment" --since 2024-01-01

# From specific sender
email-archiver --provider gmail --query "from:important@example.com"

Webhook Integration

# Send emails to processing endpoint
email-archiver --provider gmail --incremental \
  --webhook-url https://api.example.com/emails \
  --webhook-secret "Bearer sk_live_abc123"

Custom Download Directory

# Save to specific folder
email-archiver --provider gmail --since 2024-12-01 \
  --download-dir /path/to/backup/emails

โš™๏ธ Configuration

Gmail Setup

  1. Create a project in Google Cloud Console
  2. Enable Gmail API
  3. Create OAuth 2.0 credentials (Desktop App)
  4. Save credentials as config/client_secret.json

Microsoft 365 Setup

  1. Register app in Azure Portal
  2. Add Mail.Read permission
  3. Update config/settings.yaml with your Client ID

See Quick Start Guide for detailed instructions.

๐Ÿช Webhook Integration

EESA can automatically POST downloaded .eml files to a webhook endpoint:

Via CLI:

email-archiver --provider gmail --since 2024-12-01 \
  --webhook-url https://webhook.site/your-id \
  --webhook-secret "Bearer token"

Via Configuration:

# config/settings.yaml
webhook:
  url: "https://your-webhook.com/endpoint"
  enabled: true
  headers:
    Authorization: "Bearer your-token"

๐Ÿ“‹ Command-Line Arguments

Argument Description
--provider {gmail,m365} Email provider (required)
--since YYYY-MM-DD Download emails since date
--incremental Resume from last checkpoint
--query STRING Custom search query
--webhook-url URL Webhook endpoint URL
--webhook-secret SECRET Authorization header for webhook
--download-dir PATH Custom download directory
--classify Enable AI email classification
--openai-api-key KEY OpenAI API key
--skip-promotional Skip promotional/social emails
--metadata-output PATH Path to save JSONL metadata
--llm-provider ID LLM provider (openai, ollama, etc.)
--llm-base-url URL Custom LLM API endpoint URL
--extract Enable advanced metadata extraction
--ui Launch the Web Dashboard

See API Reference for complete documentation.

๐Ÿ”ง Requirements

  • Python 3.9+
  • Gmail API credentials (for Gmail)
  • Azure AD app registration (for M365)

๐Ÿ“ Project Structure

email-archiver/
โ”œโ”€โ”€ email_archiver/         # Main package
โ”‚   โ”œโ”€โ”€ main.py            # CLI entry point
โ”‚   โ””โ”€โ”€ core/              # Core modules
โ”‚       โ”œโ”€โ”€ gmail_handler.py
โ”‚       โ”œโ”€โ”€ graph_handler.py
โ”‚       โ””โ”€โ”€ utils.py
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ settings.yaml      # Configuration file
โ”‚   โ”œโ”€โ”€ checkpoint.json    # Incremental sync state
โ”‚   โ””โ”€โ”€ client_secret.json # OAuth credentials (git-ignored)
โ”œโ”€โ”€ auth/                  # OAuth tokens (git-ignored)
โ”œโ”€โ”€ downloads/             # Downloaded .eml files
โ”œโ”€โ”€ docs/                  # Documentation
โ””โ”€โ”€ pyproject.toml         # Package configuration

๐Ÿ”’ Security

  • OAuth2 Only - No password storage
  • Read-Only Scopes - gmail.readonly and Mail.Read
  • Token Protection - Tokens stored with restricted permissions (chmod 600)
  • HTTPS Webhooks - Always use HTTPS for webhook endpoints

๐Ÿค Contributing

This project follows the specification in docs/SPECIFICATION.md.

๐Ÿ“„ License

See LICENSE file for details.

๐Ÿ†˜ Support

y For issues or questions:

  1. Check the documentation
  2. Review examples
  3. Check logs in sync.log
  4. Open an issue on GitHub

๐ŸŽ“ Examples

Automation with Cron

# Daily backup at 2 AM
0 2 * * * email-archiver --provider gmail --incremental

Python Integration

import subprocess

subprocess.run([
    "email-archiver",
    "--provider", "gmail",
    "--since", "2024-12-01"
])

Using uvx (no installation)

# Run directly without installing
uvx email-archiver --provider gmail --since 2024-12-01

# Works from any directory
uvx email-archiver --help

See EXAMPLES.md for 21 more examples!


๐Ÿ‘ฅ Author & Credits

Author: Trung Le
Team: RealTimeX.ai
Repository: https://github.com/therealtimex/email-archiver


Built with โค๏ธ for secure email archiving

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

email_archiver-0.7.8.tar.gz (125.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

email_archiver-0.7.8-py3-none-any.whl (38.0 kB view details)

Uploaded Python 3

File details

Details for the file email_archiver-0.7.8.tar.gz.

File metadata

  • Download URL: email_archiver-0.7.8.tar.gz
  • Upload date:
  • Size: 125.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for email_archiver-0.7.8.tar.gz
Algorithm Hash digest
SHA256 c6d36bb0e44f4253efe99c79aa6722e81e8c58645a2e25e73d067e52447b6e2c
MD5 4697053844c282df1cadbb61c4e72753
BLAKE2b-256 59db7cda4926293df56294ff204254b6d4596a007c442f1dedc507d5180203e9

See more details on using hashes here.

File details

Details for the file email_archiver-0.7.8-py3-none-any.whl.

File metadata

  • Download URL: email_archiver-0.7.8-py3-none-any.whl
  • Upload date:
  • Size: 38.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for email_archiver-0.7.8-py3-none-any.whl
Algorithm Hash digest
SHA256 515d5c567cd7a4704b79e1561d27292d20f21ff5a427530a69fe910cf357d5bb
MD5 71905cc760aa03c0d534ac7381e2b259
BLAKE2b-256 6979663dd1a63982adb6b3e69b6e0131d3ed1791b5f7e4d618a80577a09913ba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page