{"id":48963747,"url":"https://github.com/paperfoot/email-cli","last_synced_at":"2026-04-18T03:03:45.708Z","repository":{"id":346990350,"uuid":"1179872792","full_name":"paperfoot/email-cli","owner":"paperfoot","description":"Send, receive, and manage email from your terminal. Built for AI agents. Resend API, local SQLite mailbox, RFC 5322 threading, 50+ commands.","archived":false,"fork":false,"pushed_at":"2026-04-17T20:43:03.000Z","size":447,"stargazers_count":3,"open_issues_count":11,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T22:29:22.265Z","etag":null,"topics":["ai-agent-tools","ai-agents","automation","cli","command-line-tool","developer-tools","devtools","email","email-api","email-automation","email-cli","email-threading","local-first","resend","resend-api","rfc-5322","rust","rust-cli","send-email","sqlite"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paperfoot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-12T13:20:48.000Z","updated_at":"2026-04-17T20:43:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/paperfoot/email-cli","commit_stats":null,"previous_names":["199-biotechnologies/email-cli","paperfoot/email-cli"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/paperfoot/email-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paperfoot%2Femail-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paperfoot%2Femail-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paperfoot%2Femail-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paperfoot%2Femail-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paperfoot","download_url":"https://codeload.github.com/paperfoot/email-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paperfoot%2Femail-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31954738,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent-tools","ai-agents","automation","cli","command-line-tool","developer-tools","devtools","email","email-api","email-automation","email-cli","email-threading","local-first","resend","resend-api","rfc-5322","rust","rust-cli","send-email","sqlite"],"created_at":"2026-04-18T03:03:42.310Z","updated_at":"2026-04-18T03:03:45.700Z","avatar_url":"https://github.com/paperfoot.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n\n# Email CLI\n\n**Send, receive, and manage email from your terminal. Built for AI agents.**\n\n\u003cbr /\u003e\n\n[![Star this repo](https://img.shields.io/github/stars/paperfoot/email-cli?style=for-the-badge\u0026logo=github\u0026label=%E2%AD%90%20Star%20this%20repo\u0026color=yellow)](https://github.com/paperfoot/email-cli/stargazers)\n\u0026nbsp;\u0026nbsp;\n[![Follow @longevityboris](https://img.shields.io/badge/Follow_%40longevityboris-000000?style=for-the-badge\u0026logo=x\u0026logoColor=white)](https://x.com/longevityboris)\n\n\u003cbr /\u003e\n\n[![Crates.io](https://img.shields.io/crates/v/email-cli?style=for-the-badge\u0026logo=rust\u0026logoColor=white\u0026label=crates.io)](https://crates.io/crates/email-cli)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](LICENSE)\n[![Rust](https://img.shields.io/badge/Rust-1.85+-orange?style=for-the-badge\u0026logo=rust\u0026logoColor=white)](https://www.rust-lang.org/)\n[![Homebrew](https://img.shields.io/badge/Homebrew-tap-FBB040?style=for-the-badge\u0026logo=homebrew\u0026logoColor=white)](https://github.com/199-biotechnologies/homebrew-tap)\n\n---\n\nA single binary that gives your AI agent a real email address. Send, receive, reply, draft, sync, and manage contacts, broadcasts, segments, and topics through Resend -- all from the command line. No IMAP. No browser inbox. No MCP server. Just a local SQLite mailbox and 70+ commands.\n\n[Why This Exists](#why-this-exists) | [Install](#install) | [How It Works](#how-it-works) | [Commands](#commands) | [Mailing-list Workflows](#mailing-list-workflows) | [Configuration](#configuration) | [Contributing](#contributing)\n\n\u003c/div\u003e\n\n## Why This Exists\n\nAI agents need to send and receive email. The existing options are bad:\n\n- **IMAP/SMTP** requires complex server configuration, credential management, and connection handling. Agents struggle with it.\n- **Email APIs** work for sending, but agents need a local mailbox to track threads, drafts, and read status.\n- **Browser-based inboxes** are not scriptable. Agents cannot use them.\n\nEmail CLI solves this by wrapping the [Resend API](https://resend.com) in a local-first CLI. Your agent gets a verified email address, a local SQLite mailbox, and structured JSON output with semantic exit codes. It calls `agent-info` once to learn every command, then works from memory.\n\nYou can also use it as a human. It works the same way.\n\n## Install\n\n### One-line install (pre-built binary, no Rust required)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/paperfoot/email-cli/main/install.sh | sh\n```\n\n### Homebrew\n\n```bash\nbrew tap 199-biotechnologies/tap\nbrew install email-cli\n```\n\n### Cargo\n\n```bash\ncargo install email-cli\n```\n\n### Update\n\n```bash\nemail-cli update           # self-update from GitHub Releases\nemail-cli update --check   # check without installing\n```\n\n## Quick Start\n\n```bash\n# 1. Add your Resend API key\nemail-cli profile add default --api-key-env RESEND_API_KEY\n\n# 2. Verify domain connectivity\nemail-cli profile test default\n\n# 3. Register a sending identity\nemail-cli account add agent@yourdomain.com \\\n  --profile default \\\n  --name \"Agent\" \\\n  --default\n\n# 4. Send an email\nemail-cli send \\\n  --to someone@example.com \\\n  --subject \"Hello from email-cli\" \\\n  --text \"Sent from the terminal.\"\n\n# 5. Sync and read incoming mail\nemail-cli sync\nemail-cli inbox ls\nemail-cli inbox read 1 --mark-read\n\n# 6. Reply (threads correctly with In-Reply-To + References)\nemail-cli reply 1 --text \"Got it, thanks.\"\n\n# 7. Reply All (preserves CC recipients)\nemail-cli reply 1 --all --text \"Thanks everyone.\"\n\n# 8. Forward\nemail-cli forward 1 --to colleague@example.com --text \"FYI\"\n\n# 9. Thread a new send into an existing conversation\nemail-cli send --reply-to-msg 1 --to someone@example.com --text \"Following up\"\n```\n\n## How It Works\n\nThree concepts:\n\n1. **Profile** -- a Resend API key. You can have multiple profiles for different Resend accounts.\n2. **Account** -- a sender/receiver identity (`agent@yourdomain.com`). Each account belongs to a profile.\n3. **Local mailbox** -- a SQLite database that stores messages, drafts, attachments, and sync cursors.\n\nResend handles delivery. Email CLI handles the local operating model that agents need: read tracking, threading, drafts, batch sends, and structured output.\n\n```\n┌────────────────────────────────┐\n│         Your Agent / You       │\n│    (Claude, Codex, Gemini)     │\n└──────────────┬─────────────────┘\n               │  CLI commands\n               ▼\n┌────────────────────────────────┐\n│          email-cli             │\n│   50+ commands, JSON output,   │\n│   semantic exit codes          │\n└──────────┬─────────┬───────────┘\n           │         │\n     ┌─────▼──┐  ┌───▼────────┐\n     │ SQLite │  │ Resend API │\n     │ local  │  │  (send,    │\n     │ store  │  │  receive,  │\n     │        │  │  domains)  │\n     └────────┘  └────────────┘\n```\n\n## Commands\n\n### Core Email\n\n| Command | What it does |\n|---|---|\n| `send` | Send email (--reply-to-msg for threading, --cc, --bcc, --attach) |\n| `reply \u003cid\u003e` | Reply with proper threading headers (--all for Reply All) |\n| `forward \u003cid\u003e` | Forward a message (--to, --cc, --text for preamble) |\n| `sync` | Pull sent and received messages into local store |\n| `inbox ls` | List messages (filter by account, unread status) |\n| `inbox read \u003cid\u003e` | Read a message, optionally mark as read |\n| `inbox search \u003cq\u003e` | Search messages by keyword |\n| `inbox delete \u003cid\u003e` | Delete a message |\n| `inbox archive \u003cid\u003e` | Archive a message |\n| `draft create` | Save a local draft with attachment snapshots |\n| `draft list` | List all drafts |\n| `draft show \u003cid\u003e` | View draft details |\n| `draft edit \u003cid\u003e` | Edit a draft |\n| `draft send \u003cid\u003e` | Send a draft and delete it |\n| `draft delete \u003cid\u003e` | Delete a draft |\n| `attachments list \u003cid\u003e` | List attachments on a message |\n| `attachments get \u003cid\u003e \u003catt\u003e` | Download an attachment to disk |\n\n### Account Management\n\n| Command | What it does |\n|---|---|\n| `profile add \u003cname\u003e` | Add or update a Resend API profile |\n| `profile list` | List all profiles |\n| `profile test \u003cname\u003e` | Test API connectivity |\n| `account add \u003cemail\u003e` | Register an email identity |\n| `account list` | List all accounts |\n| `account use \u003cemail\u003e` | Set the default sending account |\n| `signature set \u003caccount\u003e` | Set per-account signature |\n| `signature show \u003caccount\u003e` | Show signature |\n\n### Resend Management\n\n| Command | What it does |\n|---|---|\n| `domain list` | List your Resend domains |\n| `domain get \u003cid\u003e` | Get domain details with DNS records |\n| `domain create --name \u003cd\u003e` | Register a new domain |\n| `domain verify \u003cid\u003e` | Trigger domain verification |\n| `domain delete \u003cid\u003e` | Delete a domain |\n| `domain update \u003cid\u003e` | Update tracking settings |\n| `batch send --file \u003cpath\u003e` | Send batch emails from a JSON file |\n| `email list` | List sent emails via Resend GET /emails (each row includes `last_event` for polling) |\n| `api-key list` | List API keys |\n| `api-key create --name \u003cn\u003e` | Create an API key |\n| `api-key delete \u003cid\u003e` | Delete an API key |\n\n### The Audience Section\n\nIn the Resend dashboard, \"Audience\" is the section name in the left sidebar. It groups four primitives — **Contacts**, **Properties**, **Segments**, and **Topics** — each with its own CLI command in email-cli:\n\n| Resend dashboard tab | email-cli command | Purpose |\n|---|---|---|\n| Contacts | `contact` | Individual email addresses |\n| Properties | `contact-property` | Typed custom-field schemas (e.g. `company`, `plan`) |\n| Segments | `segment` | Groupings of contacts (a contact can be in multiple segments) |\n| Topics | `topic` | User-facing subscription preferences for broadcasts |\n\n\u003e The pre-November-2025 \"Audiences as a grouping primitive\" model has been replaced. Contacts are now flat — each contact can belong to zero, one, or multiple segments. There is no `audience` noun in this CLI; use `segment` instead.\n\n### Contacts\n\n| Command | What it does |\n|---|---|\n| `contact list` | List contacts (`--limit` 1-100, `--after \u003cid\u003e` for cursor pagination) |\n| `contact get \u003cid_or_email\u003e` | Get a contact by id or email (surfaces custom properties) |\n| `contact create --email \u003caddr\u003e` | Create a contact (`--first-name`, `--last-name`, `--unsubscribed`, `--properties '{\"k\":\"v\"}'`, `--segments seg1,seg2`, `--topics top_xxx:opt_in,top_yyy:opt_out`) |\n| `contact update \u003cid_or_email\u003e` | Update contact fields (`--first-name`, `--last-name`, `--unsubscribed`, `--properties`) |\n| `contact delete \u003cid_or_email\u003e` | Delete a contact |\n\n### Segments\n\n| Command | What it does |\n|---|---|\n| `segment list` | List segments |\n| `segment get \u003cid\u003e` | Get segment details |\n| `segment create --name \u003cn\u003e` | Create a segment |\n| `segment delete \u003cid\u003e` | Delete a segment |\n| `segment contacts \u003cid\u003e` | List the contacts in a segment |\n| `segment contact-add --contact \u003cid_or_email\u003e --segment \u003cid\u003e` | Add a contact to a segment |\n| `segment contact-remove --contact \u003cid_or_email\u003e --segment \u003cid\u003e` | Remove a contact from a segment |\n| `segment contact-list --contact \u003cid_or_email\u003e` | List the segments a contact belongs to |\n\n### Custom Contact Properties\n\nResend's contact properties are typed key/value fields you attach to contacts. Use them for merge tags in broadcasts and templates. **You must define a property's schema before assigning values to a contact.**\n\n| Command | What it does |\n|---|---|\n| `contact-property list` | List defined contact-property schemas |\n| `contact-property get \u003cid\u003e` | Get a contact-property schema |\n| `contact-property create --key company --property-type string` | Define a property (`--fallback` for default value, `--property-type` `string`/`number`) |\n| `contact-property update \u003cid\u003e --fallback \"N/A\"` | Update a property's fallback value (add `--as-number` if the property is numeric) |\n| `contact-property delete \u003cid\u003e` | Delete a contact-property schema |\n| `contact create --properties '{\"company\":\"Acme\",\"plan\":\"pro\"}'` | Assign property values when creating a contact |\n\n### Topics (Granular Subscription Preferences)\n\nTopics power Resend's granular unsubscribe flow on broadcasts. Each contact can be opted in or out of any topic, and broadcasts wired to a topic auto-substitute the right unsubscribe URL.\n\n| Command | What it does |\n|---|---|\n| `topic list` | List topics |\n| `topic get \u003cid\u003e` | Get topic details |\n| `topic create --name \"Weekly Digest\"` | Create a topic (`--description`, `--default-subscription opt_in`/`opt_out`, `--visibility public`/`private`) |\n| `topic update \u003cid\u003e` | Update topic fields (`--name`, `--description`, `--default-subscription`, `--visibility`) |\n| `topic delete \u003cid\u003e` | Delete a topic |\n| `topic contact-set --contact \u003cid\u003e --topic \u003cid\u003e --subscription opt_in` | Subscribe or unsubscribe a contact |\n| `topic contact-list --contact \u003cid\u003e` | List a contact's topic subscriptions |\n\n### Broadcasts\n\nBroadcasts are Resend's native campaign sending. Use these instead of `batch send` when you want auto unsubscribe wiring (`{{{RESEND_UNSUBSCRIBE_URL}}}`), server-side scheduling, and Resend's internal queue throttling.\n\n| Command | What it does |\n|---|---|\n| `broadcast list` | List broadcasts |\n| `broadcast get \u003cid\u003e` | Get broadcast details |\n| `broadcast create --segment-id \u003cid\u003e --from \u003caddr\u003e --subject \u003csubj\u003e --html \u003cbody\u003e` | Create a broadcast (`--text`, `--name`, `--reply-to`, `--topic-id`, `--scheduled-at`, `--send` for inline send). `--audience-id` is accepted as a legacy alias. |\n| `broadcast update \u003cid\u003e` | Update a draft broadcast (`--segment-id`, `--from`, `--subject`, `--html`, `--text`, `--name`, `--reply-to`, `--topic-id`) |\n| `broadcast send \u003cid\u003e` | Send (or schedule via `--scheduled-at`) |\n| `broadcast delete \u003cid\u003e` | Delete (cancels scheduled broadcasts) |\n\n### Agent Tooling\n\n| Command | What it does |\n|---|---|\n| `agent-info` | Machine-readable JSON capability manifest |\n| `skill install` | Install skill file for Claude/Codex/Gemini |\n| `skill status` | Check skill installation status |\n| `completions \u003cshell\u003e` | Generate shell completions (bash/zsh/fish) |\n\n## Mailing-list Workflows\n\nEmail CLI is the Resend client for [`mailing-list-cli`](https://github.com/paperfoot/mailing-list-cli) and any other tool that needs to wrap a complete mailing-list workflow on top of Resend. Three primitives matter:\n\n1. **Segments** group contacts. (Audiences, in pre-November-2025 terms.)\n2. **Contact properties** are typed custom fields on each contact. Define the schema, then assign values.\n3. **Topics** drive granular per-contact subscription preferences for broadcasts.\n\n### End-to-end example\n\n```bash\n# 1. Define a custom field schema (do this once per property)\nemail-cli contact-property create --key company --property-type string\nemail-cli contact-property create --key plan --property-type string --fallback \"free\"\n\n# 2. Create a topic for granular unsubscribes\nemail-cli topic create --name \"Weekly Digest\" --default-subscription opt_in\n# → returns topic id, e.g. top_xyz\n\n# 3. Create a segment to group contacts\nemail-cli segment create --name \"Beta users\"\n# → returns segment id, e.g. seg_abc123\n\n# 4. Add a contact with custom properties and add them to the segment in one shot\nemail-cli contact create \\\n  --email alice@example.com \\\n  --first-name Alice \\\n  --properties '{\"company\":\"Acme\",\"plan\":\"pro\"}' \\\n  --segments seg_abc123\n\n# 5. Subscribe the contact to the topic\nemail-cli topic contact-set \\\n  --contact alice@example.com \\\n  --topic top_xyz \\\n  --subscription opt_in\n\n# 6. Create and send a broadcast (auto unsubscribe URL via {{{RESEND_UNSUBSCRIBE_URL}}})\nemail-cli broadcast create \\\n  --segment-id seg_abc123 \\\n  --topic-id top_xyz \\\n  --from \"Acme \u003chello@yourdomain.com\u003e\" \\\n  --subject \"This week at Acme\" \\\n  --html '\u003cp\u003eHi {{first_name}},\u003c/p\u003e\u003cp\u003eLatest digest...\u003c/p\u003e\u003cp\u003e\u003ca href=\"{{{RESEND_UNSUBSCRIBE_URL}}}\"\u003eUnsubscribe\u003c/a\u003e\u003c/p\u003e'\n# → returns broadcast id, e.g. brd_456\n\nemail-cli broadcast send brd_456\n\n# 7. Poll delivery status (replaces a webhook listener for the basic case)\nemail-cli email list --limit 100\n```\n\n\u003e Note: Wiring `--topic-id` on the broadcast tells Resend which topic the unsubscribe link should opt the recipient out of. Without `--topic-id`, the unsubscribe URL still works but uses an account-wide unsubscribe.\n\n### Why polling beats running a second webhook listener\n\n`email list` returns each email's `last_event` (`sent`, `delivered`, `bounced`, `complained`, `opened`, `clicked`). For the suppression-driving path -- delivered/bounced/complained -- polling is enough and avoids the operational cost of a second webhook URL pointed at your tool. For full engagement history (open → click → unsubscribe), keep using `webhook listen` -- it stores every event into the local SQLite events table, which `events list` queries.\n\n## Email Threading\n\nEvery outgoing email gets a unique `Message-ID` header (`\u003cuuid@yourdomain.com\u003e`). Replies set `In-Reply-To` and `References` per RFC 5322, so threads display correctly in Gmail, Outlook, and Apple Mail.\n\n| Action | Headers Set | Threading |\n|---|---|---|\n| `send` | Message-ID | New conversation |\n| `send --reply-to-msg \u003cid\u003e` | Message-ID, In-Reply-To, References | Threads into existing conversation |\n| `reply \u003cid\u003e` | Message-ID, In-Reply-To, References | Threads into existing conversation |\n| `reply \u003cid\u003e --all` | Same + preserves CC | Threads with all recipients |\n| `forward \u003cid\u003e` | Message-ID only | New conversation (per RFC) |\n\n## Agent Integration\n\nEmail CLI follows the [agent-cli-framework](https://github.com/paperfoot/agent-cli-framework) patterns. Any agent that speaks structured JSON can use it.\n\n### Capability Discovery\n\n```bash\nemail-cli agent-info\n```\n\nReturns a JSON manifest of every command, flag, exit code, and output format. An agent calls this once and works from memory.\n\n### Structured Output\n\nAll commands produce JSON when piped or when you pass `--json`:\n\n```json\n{\n  \"version\": \"1\",\n  \"status\": \"success\",\n  \"data\": { ... }\n}\n```\n\nErrors include actionable suggestions:\n\n```json\n{\n  \"version\": \"1\",\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"config_error\",\n    \"message\": \"no default account configured\",\n    \"suggestion\": \"Run profile add / account add to configure\"\n  }\n}\n```\n\n### Semantic Exit Codes\n\n| Code | Meaning | Agent action |\n|---|---|---|\n| 0 | Success | Continue |\n| 1 | Transient error (network) | Retry |\n| 2 | Configuration error | Fix setup |\n| 3 | Bad input | Fix arguments |\n| 4 | Rate limited | Wait and retry |\n\n### Skill Self-Install\n\n```bash\nemail-cli skill install\n```\n\nWrites a skill file to `~/.claude/skills/email-cli/`, `~/.codex/skills/email-cli/`, and `~/.gemini/skills/email-cli/`. The skill tells agents the CLI exists and to run `agent-info` for full details.\n\n## Configuration\n\n### Local State\n\nAll data lives in `~/.local/share/email-cli/email-cli.db` (override with `--db \u003cpath\u003e`). Sibling directories:\n\n- `draft-attachments/` -- snapshots of files attached to drafts\n- `downloads/` -- fetched attachments (configurable via `--output`)\n\n### Database Tables\n\n| Table | Purpose |\n|---|---|\n| `profiles` | API key storage |\n| `accounts` | Email identities with signatures |\n| `messages` | Sent and received email with full metadata |\n| `drafts` | Local drafts with attachment snapshots |\n| `attachments` | Attachment metadata and local file paths |\n| `sync_state` | Per-account sync cursor positions |\n\nSQLite runs with WAL mode, busy timeout, and foreign keys enabled.\n\n### Security\n\n- API keys live in the local SQLite database. Treat `email-cli.db` as sensitive.\n- Use `--api-key-env VAR_NAME` or `--api-key-file path` instead of passing keys directly.\n- Attachment filenames are sanitized before writing to disk.\n- Each send includes a UUID `Idempotency-Key` header.\n\n### Requirements\n\n- A [Resend](https://resend.com) API key with sending enabled\n- A verified Resend domain (enable receiving on the domain for inbox sync)\n- Rust 1.85+ if building from source (edition 2024)\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nMIT -- see [LICENSE](LICENSE).\n\n---\n\u003cdiv align=\"center\"\u003e\n\nBuilt by [Boris Djordjevic](https://github.com/longevityboris) at [199 Biotechnologies](https://github.com/199-biotechnologies) | [Paperfoot AI](https://paperfoot.ai)\n\n\u003cbr /\u003e\n\n**If this is useful to you:**\n\n[![Star this repo](https://img.shields.io/github/stars/paperfoot/email-cli?style=for-the-badge\u0026logo=github\u0026label=%E2%AD%90%20Star%20this%20repo\u0026color=yellow)](https://github.com/paperfoot/email-cli/stargazers)\n\u0026nbsp;\u0026nbsp;\n[![Follow @longevityboris](https://img.shields.io/badge/Follow_%40longevityboris-000000?style=for-the-badge\u0026logo=x\u0026logoColor=white)](https://x.com/longevityboris)\n\n\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaperfoot%2Femail-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaperfoot%2Femail-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaperfoot%2Femail-cli/lists"}