Skip to content

AbdAsh/JustSend

Repository files navigation

JustSend Logo

JustSend

A lightweight, self-hosted SMTP email client for sending emails from any SMTP server — right from your browser.

License: MIT Docker Next.js


What is JustSend?

JustSend is a self-hosted web application that wraps any SMTP server with a clean, modern UI. Think of it as a personal email dashboard — configure your SMTP servers once, then compose and send emails from your browser.

No email provider lock-in. Works with Gmail, Outlook, Amazon SES, Mailgun, SendGrid, your own mail server, or any service that speaks SMTP.

Key Features

  • 🔀 Multi-SMTP — Add multiple SMTP configs and hot-swap between them per email
  • 🔐 Encrypted Credentials — SMTP passwords encrypted at rest with AES-256-GCM
  • 📬 Send History — Every email logged with delivery status and error details
  • 🐳 Docker-Ready — One-command deploy with Docker Compose / Coolify
  • 🗄️ SQLite — Zero-dependency database, no external services needed
  • 🎨 Dark UI — Clean, modern interface with glassmorphism design

Quick Start

Prerequisites

  • Node.js 20+
  • npm

Local Development

# Clone the repo
git clone https://github.com/your-username/justsend.git
cd justsend

# Install dependencies
npm install

# Initialize the database
npm run db:push

# Start dev server
npm run dev

Open http://localhost:3000, click the ⚙️ gear icon, add your SMTP server, and start sending.

Docker (Recommended)

docker compose up -d

The SQLite database and auto-generated encryption key persist in a named volume across restarts. No configuration needed.


Environment Variables

Variable Required Default Description
ENCRYPTION_KEY No Auto-generated 32-byte hex key for AES-256-GCM. If not set, a key is auto-generated and saved to data/.encryption_key
DB_FILE_PATH No ./data/justsend.db Path to the SQLite database file

Note: SMTP credentials are configured through the UI and stored encrypted in the database — not in environment variables.


Tech Stack

Layer Technology
Framework Next.js 16 (App Router)
Database SQLite via better-sqlite3
ORM Drizzle ORM
Email Nodemailer
UI Tailwind CSS + shadcn/ui
Encryption Node.js crypto (AES-256-GCM)

Project Structure

src/
├── app/
│   ├── api/
│   │   ├── emails/          # GET sent email history
│   │   ├── send/            # POST send email
│   │   └── smtp-configs/    # SMTP config CRUD
│   ├── globals.css
│   ├── layout.tsx
│   └── page.tsx
├── components/
│   ├── ui/                  # shadcn/ui primitives
│   ├── compose-form.tsx     # Email composition with SMTP selector
│   ├── email-detail-dialog.tsx
│   ├── header.tsx           # App header with settings button
│   ├── sent-mail-table.tsx
│   ├── smtp-config-dialog.tsx
│   └── smtp-config-manager.tsx
├── db/
│   ├── index.ts             # SQLite connection singleton
│   └── schema.ts            # Drizzle schema
└── lib/
    ├── crypto.ts            # AES-256-GCM encrypt/decrypt
    ├── smtp.ts              # DB-driven SMTP transporter
    └── utils.ts             # Shared utilities

Security

  • SMTP passwords are AES-256-GCM encrypted before being stored in the database
  • Encryption key is auto-generated if not provided — zero-config security
  • Passwords are never returned in API responses
  • The SQLite database file is excluded from version control via .gitignore

Roadmap

See ROADMAP.md for planned features.


License

MIT


Topics: email smtp self-hosted email-client email-sender nextjs docker sqlite nodemailer coolify smtp-client mail web-app typescript

About

A lightweight, self-hosted SMTP email client for sending emails from any SMTP server — right from your browser.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors