email-summarizer

v1.0.4

Email summary and contact profiling skill. Fetch emails from an IMAP mailbox or parse local exports (.pst / .mbox / .msg), build a contact profile report (HT...

1· 176·1 current·1 all-time
byMomo@momothemage

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for momothemage/email-summarizer.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "email-summarizer" (momothemage/email-summarizer) from ClawHub.
Skill page: https://clawhub.ai/momothemage/email-summarizer
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install email-summarizer

ClawHub CLI

Package manager switcher

npx clawhub@latest install email-summarizer
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (email summarization and contact profiling) align with the code and instructions. fetch_imap.py, parse_file.py, build_report.py, and send_report.py implement the described workflows. Node.js dependency (pst-extractor) is justified for native .pst parsing and readpst is offered as an alternative.
Instruction Scope
SKILL.md and scripts limit actions to reading local archives or connecting to IMAP/SMTP using credentials provided by the user. The skill reads/writes local files and may call a bundled Node helper or the system readpst binary when parsing .pst files; SKILL.md documents these calls and the code avoids shell=True and remote URLs during runtime. Scripts prompt for credentials if env vars are not set.
Install Mechanism
There is no platform install spec (instruction-only install). Runtime requires pip install -r requirements.txt and an optional npm install in scripts/. package-lock.json is included and shows resolved package tarballs served from a mirrors.tencent.com URL — npm install will pull pst-extractor (and transitive deps). This is a normal npm install flow but users may want to verify the registry/mirror and package integrity before running npm install in a sensitive environment.
Credentials
Only mailbox-related credentials (EMAIL_USER, EMAIL_PASS) and optional IMAP_HOST/IMAP_PORT are used; these are appropriate for IMAP fetch and SMTP send. The skill does not request unrelated cloud/provider keys or other secrets. Note: the registry metadata reported 'required env vars: none' while SKILL.md documents optional EMAIL_USER/EMAIL_PASS — this is a minor metadata mismatch (they are optional, not required).
Persistence & Privilege
The skill is not always-enabled and does not request elevated or persistent system privileges. It does not modify other skills or global agent settings. Autonomous invocation is allowed (platform default) but not combined with other privileged behaviors.
Assessment
This skill appears to do exactly what it claims: parse local email exports or fetch via IMAP, build an HTML/XLSX contact report, and optionally send it over SMTP. Before installing/running: - Only provide an app-specific IMAP/SMTP password (EMAIL_PASS) or use an app password from your mailbox provider; avoid using your primary login password. - If you need PST parsing, the skill asks you to run `cd scripts && npm install`. Review package.json/package-lock and consider setting npm to the registry you trust (the included lockfile references a Tencent mirror). Verify pst-extractor's integrity or run npm install in an isolated VM/container if you are uncomfortable. - The scripts will call the bundled Node helper (node scripts/pst_extractor_helper.js) and may call the system readpst binary if you choose that engine. Both operate on local files only; confirm you’re pointing them at the intended export files. - send_report.py uses SMTP presets (163/qq/gmail/outlook); review SMTP_MAP if you want to confirm which SMTP hosts/ports will be contacted and that they match your expectations. - Reports and any attachments are written to disk; treat generated files as you would any sensitive export (store/delete securely). If you want to be extra cautious, run the skill in a disposable environment (container or VM) and inspect network activity during npm install and first run. Otherwise, the package is internally coherent and proportional to its stated purpose.

Like a lobster shell, security has layers — review code before you run it.

latestvk977rr4yb21sr8wkt9rscd8qg583qg6dnewtagvk977rr4yb21sr8wkt9rscd8qg583qg6d
176downloads
1stars
5versions
Updated 3d ago
v1.0.4
MIT-0

Email Summarizer + Contact Profiler

Three independent stages — run any subset depending on what you need:

[Data Source]          [Analysis]          [Delivery]
fetch_imap.py    ──→                ──→
parse_file.py    ──→  build_report.py ──→  send_report.py
                       → .html + .xlsx

Each stage reads from / writes to files (or stdin/stdout), so they compose freely.


Installation

# Python dependencies
pip install -r requirements.txt

# Node.js dependency (only for native .pst parsing)
cd scripts && npm install && cd ..

Script Reference

Stage 1 — Data Source

fetch_imap.py — Fetch emails from a live IMAP mailbox

export EMAIL_USER=you@163.com
export EMAIL_PASS=your-app-password

# Fetch last 7 days (inbox only) → emails.json
python3 scripts/fetch_imap.py --days 7 --output emails.json

# Fetch a date range, inbox + sent
python3 scripts/fetch_imap.py --since 2026-03-01 --until 2026-03-28 \
    --with-sent --preset 163 --output emails.json

# Pipe directly to build_report.py (no intermediate file)
python3 scripts/fetch_imap.py --days 30 | python3 scripts/build_report.py --output report
FlagDefaultDescription
--days N7Fetch last N days. Ignored if --since is set.
--since DATEStart date inclusive (YYYY-MM-DD)
--until DATEEnd date exclusive (YYYY-MM-DD, default: today)
--max N200Max emails per folder
--folder NAMEINBOXInbox folder name
--preset NAME163Mailbox preset: 163 | qq | exmail | gmail | outlook
--with-sentoffAlso fetch Sent folder (recommended for relationship analysis)
--output FILEstdoutWrite JSON to file; prints to stdout if omitted

Supported presets:

PresetIMAP ServerSent folder
163imap.163.com:993已发送
qqimap.qq.com:993Sent Messages
exmailimap.exmail.qq.com:993Sent Messages
gmailimap.gmail.com:993[Gmail]/Sent Mail
outlookoutlook.office365.com:993Sent Items

parse_file.py — Parse a local email export

# Parse a .pst file (native engine, no system install needed)
python3 scripts/parse_file.py --pst ~/Downloads/archive.pst --output emails.json

# Parse a .mbox file (inbox + sent)
python3 scripts/parse_file.py --mbox Inbox.mbox --sent-mbox Sent.mbox --output emails.json

# Parse a folder of .msg files, filter by date
python3 scripts/parse_file.py --msg-dir ./exported/ --since 2026-01-01 --output emails.json

# Pipe to build_report.py
python3 scripts/parse_file.py --pst archive.pst | python3 scripts/build_report.py --output report
FlagDefaultDescription
--pst FILEOutlook .pst archive
--mbox FILEUnix mbox file
--msg-dir DIRFolder of .msg files
--sent-mbox FILEAdditional sent-items mbox (with --mbox)
--pst-engineautoauto | native | readpst
--days NallOnly include last N days
--since DATEStart date inclusive (YYYY-MM-DD)
--until DATEEnd date exclusive (YYYY-MM-DD)
--max N500Max emails to load
--output FILEstdoutWrite JSON to file; prints to stdout if omitted

PST engines:

EngineFlagRequires
Native (default)--pst-engine nativecd scripts && npm install
Readpst--pst-engine readpstapt install pst-utils or brew install libpst
Auto--pst-engine autoTries native first, falls back to readpst

Stage 2 — Analysis

build_report.py — Analyse emails → HTML + Excel report

# From a file
python3 scripts/build_report.py --input emails.json --output report

# Specify owner explicitly (when analysing someone else's PST)
python3 scripts/build_report.py --input emails.json --output report \
    --owner xiang-xiang.hu@connect.polyu.hk

# From stdin (piped from Stage 1)
python3 scripts/fetch_imap.py --days 30 | python3 scripts/build_report.py --output report
FlagDefaultDescription
--input FILEstdinPath to emails JSON from Stage 1
--output PREFIXcontact_reportOutput path prefix. Writes <prefix>.html and <prefix>.xlsx
--owner EMAILauto-inferredMailbox owner address. Auto-detected if omitted.

Output files:

  • <prefix>.html — self-contained HTML report (open in browser or attach to email)
  • <prefix>.xlsx — Excel spreadsheet with the same data

Report columns: # / Preferred Name / Email / Company / Position / Subject Summary / Source / Emails (Recv/Sent)


Stage 3 — Delivery

send_report.py — Send report files via SMTP

export EMAIL_USER=you@163.com
export EMAIL_PASS=your-app-password

# Send HTML + Excel to a recipient
python3 scripts/send_report.py \
    --html report.html --xlsx report.xlsx --to friend@example.com

# Send to yourself (EMAIL_USER)
python3 scripts/send_report.py --html report.html --xlsx report.xlsx

# HTML only (no attachment)
python3 scripts/send_report.py --html report.html --to friend@example.com

# Custom subject
python3 scripts/send_report.py --html report.html --subject "March Contact Report"
FlagDefaultDescription
--html FILErequiredHTML file to use as email body
--xlsx FILEExcel file to attach (optional)
--to ADDREMAIL_USERRecipient address
--subject STRautoEmail subject (auto-generated if omitted)
--preset NAME163SMTP preset: 163 | qq | exmail | gmail | outlook

Private library modules (not standalone scripts)

FileProvides
_core.pydecode_header, parse_addr, get_domain, strip_html, html_esc, get_body
_analyze.pyinfer_owner, build_contacts, domain/company/position/name inference
_render.pybuild_report_html, build_excel, SMTP_MAP

Complete workflow examples

A — IMAP mailbox → report → send to self

export EMAIL_USER=you@163.com
export EMAIL_PASS=your-app-password

python3 scripts/fetch_imap.py --days 30 --with-sent --output /tmp/emails.json
python3 scripts/build_report.py --input /tmp/emails.json --output /tmp/report
python3 scripts/send_report.py --html /tmp/report.html --xlsx /tmp/report.xlsx --preset 163

B — PST file → report → send to someone

python3 scripts/parse_file.py --pst ~/Downloads/archive.pst --output /tmp/emails.json
python3 scripts/build_report.py --input /tmp/emails.json --output /tmp/report
EMAIL_USER=sender@163.com EMAIL_PASS=xxx \
  python3 scripts/send_report.py --html /tmp/report.html --xlsx /tmp/report.xlsx \
    --to recipient@example.com

C — One-liner (pipe, no intermediate files)

python3 scripts/parse_file.py --pst archive.pst \
  | python3 scripts/build_report.py --output /tmp/report

D — Report only, no email (open locally)

python3 scripts/parse_file.py --mbox Inbox.mbox --output /tmp/emails.json
python3 scripts/build_report.py --input /tmp/emails.json --output /tmp/report
# Open /tmp/report.html in a browser

AI analysis templates

After loading the email JSON into the AI context, use the following templates:

Part A: 4-Dimension Email Summary

🔥 Part 1 — Important & Action Items
  🚨 [URGENT]    Subject — Sender — Date | Summary | Action | Deadline
  ⚡ [IMPORTANT] Subject — Sender — Date | Summary | Action
  📌 [NOTE]      Subject — Sender — Date | Summary

📊 Part 2 — Grouped by Sender / Topic

✅ Part 3 — To-Do List

📅 Part 4 — Timeline (YYYY-MM-DD  Sender → Subject: summary)

Part B: Contact Profile Analysis

Sort by total interactions. For each contact:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
👤 Rank #N | Name <email>   Total: N (Recv: N / Sent: N)
🧑 Gender       M/F/Unknown  Confidence: H/M/L  Basis: …
💼 Role         …            Basis: domain / signature / keywords
🔗 Relationship Colleague / Client / Institution / Stranger
   Direction    Mutual / Owner-initiated / Contact-initiated
📝 Topics       • subject 1  • subject 2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Heat scale: 🔥 Heavy (≥10) · ⚡ Active (5–9) · 💬 Moderate (2–4) · 🌙 Light (1)


Notes

  • Credentials are passed via environment variables — never hardcoded
  • IMAP connections use readonly mode — emails are never modified or deleted
  • Body text is truncated to 2000 characters per email
  • fetch_imap.py sends an RFC 2971 ID command required by 163/188 servers; harmless on others

Comments

Loading comments...