// EVE ONLINE WEBMAIL

EVERY ALT.
ONE INBOX.

EVEMAIL is a full EVE Online mail client in your browser. Read, compose, label, bulk-delete, and send mail from every connected character without leaving your MelTuc dashboard. Persistent drafts, contacts, keyboard shortcuts, CSV export — and a one-click Claude Haiku rewrite pass that polishes corp comms before they ever hit the wire. Interactive only, no schedulers, no background jobs — you open it, you act, you close it.

Open Mail Preferences
Characters Supported
5
Rewrite Tones
10K
Char Body Limit
4
ESI Scopes Used
// HOW IT WORKS

Interactive Only. Every Action Logged.

No background jobs, no scheduler — everything happens the moment you click it. EVEMAIL proxies CCP's ESI in real time and writes an audit entry for every action.

01
Connect Character
Link EVE characters via the shared eve_sso module with four mail scopes. EVEMAIL reads active_char_id from evemail_prefs on every request, falling back to the platform's main character.
02
Fetch Mail
Labels and headers arrive from GET /characters/{id}/mail/. Sender and recipient IDs are batch-resolved to names via a single POST /universe/names/ call — no numeric IDs ever shown in the UI.
03
Read & Compose
Reading a mail auto-marks it via PUT /characters/{id}/mail/{mid}/ if evemail_prefs.auto_mark_read is on. Compose modal auto-saves keystrokes into evemail_drafts keyed by (user_id, character_id).
04
AI Rewrite (Optional)
Hit Rewrite to send the draft body to Claude Haiku via OpenRouter. Choose from neutral / friendly / formal / concise / expanded tones. Result shown side-by-side. Token counts logged to evemail_rewrite_log.
05
Send & Audit
Every send, delete, bulk-delete, label operation, and preference change appends a row to evemail_events with user_id, character_id, kind, detail JSON, and created_at — a fully auditable trail.

Three-Column Mail Client

A clean three-column layout: labels down the left, header list in the middle, selected body on the right. Sender and recipient IDs are resolved to names in a single batch through the public /universe/names/ endpoint, so you never see numeric IDs. Opening a mail auto-marks it read when you have that preference enabled. Switch characters from the header and the whole view re-queries against that alt's mailbox — no reloads, no duplicate tabs.

meltuc.tech/evemail/app
Mel Tuc
Active Character
1,247
Inbox
12
Unread
3
Drafts
Labels
▪ Inbox 12
▪ Sent
▪ Corp 2
▪ Alliance
▪ Fleet Ops
▪ Drafts 3
CCP Bartender
Ship replacement approved
Director Zulu · 3h
Fleet op Friday 19:00
Market Bot · 6h
Your contract expired
Alliance HQ · 12h
Monthly sovereignty report
Corp Recruitment · 1d
New member application
Ship replacement approved
From CCP Bartender · 3 hours ago
Pilot,
Your SRP request for the Megathron lost in the Amarr-Caldari border skirmish has been approved. The insurance payout plus reimbursement has been credited to your wallet. Fly safe out there, and thanks for flying the flag.
Reply Label Delete
Showing 1–25 of 1,247 J/K navigate · C compose · R reply

Compose With Claude

The compose modal auto-saves every keystroke into evemail_drafts, keyed by character, so you never lose a mail to a closed tab. Recipients autocomplete against exact-name ESI lookups (characters, corps, alliances, mailing lists). When your first pass feels rough, hit Rewrite — the draft goes to Claude Haiku via OpenRouter, returns polished in one of five tones, and renders side-by-side so you can accept, re-run, or discard before firing. Every call is logged to evemail_events for a full audit trail.

meltuc.tech/evemail/app — compose
To: Director Zulu, Fleet Commander Rax
Subject: Re: Friday 19:00 op — asset check
Rewrite Tone
Neutral Friendly Formal Concise Expanded
Original
hey, i can make the op friday. got the megathron repaired already and drones loaded. wallet is fine. ping if anything changes, otherwise see you on comms 18:45.
Rewritten · Friendly
Hey team, I'll be good for the Friday op. Megathron is repaired, drones are loaded, and the wallet is in order. I'll be on comms by 18:45 — ping me if anything shifts between now and then. See you out there.
Auto-saved 2s ago · 412 tokens in / 389 out Accept Rewrite Re-run Send

Standings-Aware Address Book

EVEMAIL pulls your full contacts list via esi-characters.read_contacts.v1, resolves every ID to a name in a single batched call, and displays them with their current standing. Use the contacts page to find recipients fast, filter by standing, or export your book for off-site backup. Corps, alliances, and mailing lists all resolve the same way — one unified directory.

meltuc.tech/evemail/app/contacts
Search contacts...
All Standings
All Types
Name Type Standing
Director ZuluCharacter+10.0
Fleet Commander RaxCharacter+8.5
Goonswarm FederationAlliance+5.0
Pandemic HordeAlliance0.0
Market BotMailing List
Red Fleet IntelCorporation−5.0

Per-User Preferences

A single settings page controls how EVEMAIL behaves for you. Set a default signature that gets appended to every outgoing body, pick the tone Claude should default to when you hit Rewrite, and flip auto-mark-read on or off. Everything lives in evemail_prefs, one row per user, upserted on save. No server-side mutation happens anywhere else — this page is the whole control surface.

meltuc.tech/evemail/settings
Default Signature
o7
Mel Tuc
Director, Cosmic Encounters
— sent from MelTuc EVEMAIL
Default Rewrite Tone
Neutral Friendly Formal Concise Expanded
Behavior
ON Auto-mark mail as read on open
OFF Scheduler / cron tasks (never — interactive only)
4
Connected Chars
Mel Tuc
Active Default
2h ago
Last Updated
Save Preferences

Built For Power Users

Every EVE mail operation you actually do, in one place, with the rough edges smoothed over. No scheduler, no background workers — everything happens the moment you click it, logged the moment it finishes.

📥
Multi-Character Inbox
Switch between every connected alt from the header. Each switch saves to evemail_prefs.active_char_id so you land in the same mailbox next session. No re-auth, no reload.
🛰
ESI Integration
Direct calls to CCP's official esi.evetech.net API through the shared eve_sso token module. Zero scraping, zero third-party mirrors — it's the same endpoint the in-game client uses.
🤖
AI Draft Rewrite
Anthropic Claude Haiku via OpenRouter. Five tones (neutral / friendly / formal / concise / expanded). Side-by-side review. Logged to evemail_events for token accounting.
🏷
Label Management
EVE's native labels surfaced in the sidebar. Multi-select header rows, bulk delete, bulk label — each operation loops through individually so partial failures don't strand you.
Signatures & Tone
Store a default signature in evemail_prefs that gets appended to outgoing bodies, and a default tone for Claude rewrite. Change either from /evemail/settings at any time.
📝
Persistent Drafts
Drafts live in Postgres, keyed by (user_id, character_id). Close the tab, reboot, come back later — the compose body is exactly where you left it, per alt.
🔍
Auto-Mark-Read
Opt-in preference that flips a mail to read the instant you open the body pane. Off by default so you can triage without accidentally clearing unread markers.
📬
Compose & Send
Full recipient autocomplete against characters, corps, alliances, and mailing lists. Up to 10,000 characters per body, same hard cap CCP enforces. One click sends through ESI.
📚
Audit Trail
Every send, bulk-delete, rewrite, and preference change appends a row to evemail_events with user, character, action, and timestamp. Fully auditable, nothing silent.
Keyboard Shortcuts
J/K navigate headers, C compose, R reply, E archive, ? opens the full cheat sheet. No mouse needed for a cold inbox sweep.
📤
CSV / JSON Export
Dump the current label view to CSV or JSON via /evemail/api/export.csv or export.json. Useful for diplomatic archives, corp compliance, or off-site backups.
👥
Recipient Search
Exact-name lookup against /universe/ids/ for the To field. Three-character minimum. Works for characters, corps, alliances, and mailing lists in a single unified box.

Minimum Permissions

EVEMAIL borrows tokens from the shared eve_sso module — connect your character once in your MelTuc account settings and every EVE app on the platform reuses the same grant. Four scopes cover the whole feature set; the app redirects you to re-authorise if any are missing.

esi-mail.read_mail.v1
List labels, fetch mail headers, read body text. Required for the inbox to render at all.
esi-mail.send_mail.v1
Send composed mail to characters, corps, alliances, or mailing lists via POST /characters/{id}/mail/.
esi-mail.organize_mail.v1
Mark read, apply labels, delete. Bulk ops use PUT/DELETE in a loop; this scope covers both.
esi-characters.read_contacts.v1
Contacts page and the /api/contacts endpoint. Optional — the rest of the app works without it.

Two Tables, Fully Audited

EVEMAIL's persistence layer is deliberately thin. Mail itself lives on CCP's servers — we never cache bodies, we just proxy ESI calls and render results. Locally, only preferences and the audit log are stored, both in Postgres through the shared db helper.

evemail_prefs
One row per user. Columns: user_id, default_signature, ai_rewrite_tone, auto_mark_read, active_char_id, updated_at. Upserted on every settings save via ON CONFLICT.
evemail_events
Append-only audit log. Every send, bulk-delete, label change, rewrite call, and preference save writes a row with user_id, character_id, action, payload, and created_at.
evemail_drafts
Per-character draft cache keyed by (user_id, character_id). Auto-saved on every keystroke, cleared on successful send. The only other local state besides prefs.
eve_sso (shared)
Token storage and refresh live in the platform-wide eve_sso module. EVEMAIL never touches refresh tokens directly — it just asks for an access token and uses it.
// FEATURES

Built For Power Users

Every EVE mail operation you actually need — in one place, with the rough edges smoothed over.

📥
Multi-Character Inbox
Switch between connected alts from the header. Active character saved to evemail_prefs.active_char_id via POST /api/characters/switch so you land in the same mailbox next session without re-auth.
🤖
AI Draft Rewrite
Anthropic Claude Haiku via OpenRouter. Five tones: neutral, friendly, formal, concise, expanded. Draft sent to POST /api/mail/rewrite, result shown side-by-side. Token usage logged to evemail_rewrite_log per call.
📝
Persistent Drafts
Compose modal auto-saves on every keystroke into evemail_drafts keyed by (user_id, character_id). Close the tab, come back — the subject, body, and recipients list are exactly where you left them.
🏷
Bulk Label & Delete
Select multiple mail headers and bulk-delete via POST /api/mail/bulk-delete or bulk-label via POST /api/mail/bulk-label. Each operation loops individually so partial failures don't block the rest — failed IDs returned in the response.
📚
Full Audit Trail
Every send, delete, bulk-delete, label, rewrite, and settings change writes to evemail_events with kind and detail JSON. Index on created_at DESC so the audit log is fast even after months of activity.
🔍
Contacts & Recipient Search
Contacts page fetches your full contact list via esi-characters.read_contacts.v1, resolved via POST /universe/names/. Compose To field uses POST /universe/ids/ for exact-name lookup across characters, corps, alliances, and mailing lists.
🔌
MCP Agent Access
Three endpoints are exposed as MCP tools so AI agents can list mail (evemail_list_mails), list labels (evemail_list_labels), and send mail (evemail_send) on your active character. Agent calls run through the same scope checks and audit logging as the UI.
// GET STARTED

Your Corp Comms Deserve Better.

One inbox for every alt, AI polish for every draft, keyboard shortcuts for every power-user reflex. All running on your MelTuc account, all sharing one EVE SSO grant, all fully audited.

Launch EVE Mail

Requires a MelTuc account. Create one free.