Simple email queue with Unix mail support
Project description
dbbasic-email
Simple email queue with Unix mail support.
"Email is Unix mail. Queuing is sendmail. Templates are heredocs."
Features
- Local Mail: Unix-style mailboxes for internal notifications (instant delivery)
- External Email: SMTP delivery via dbbasic-queue (async, retry logic)
- Simple Templates: Plain text templates with string formatting
- Zero Config: Works with localhost SMTP out of the box
- Minimal: ~200 lines, stdlib only (queue optional)
Installation
pip install dbbasic-email
For external email (SMTP queue):
pip install dbbasic-email[queue]
Quick Start
Local Mail (Internal Notifications)
from dbbasic_email import mail
# Send to user on same app
mail('john', 'New comment', 'Jane commented on your post')
# → Appends to var/mail/john (instant)
# Read mailbox
from dbbasic_email import read_mail
messages = read_mail('john', limit=20)
for msg in messages:
print(f"{msg['subject']}: {msg['body']}")
External Email (SMTP)
from dbbasic_email import send_email
# Queue for delivery
job_id = send_email(
to='user@gmail.com',
subject='Welcome!',
body='Thanks for signing up'
)
# Returns immediately (queued)
Templates
from dbbasic_email import send_template
# templates/email/welcome.txt
send_template('user@gmail.com', 'welcome', {
'username': 'john',
'app_url': 'https://myapp.com'
})
Configuration
Set environment variables for SMTP:
export SMTP_HOST=smtp.gmail.com
export SMTP_PORT=587
export SMTP_USER=your@gmail.com
export SMTP_PASSWORD=your-app-password
export FROM_ADDR=noreply@myapp.com
For local development:
python -m smtpd -n -c DebuggingServer localhost:1025
export SMTP_HOST=localhost SMTP_PORT=1025
CLI Commands
# Send local mail
dbbasic email:local john "Test" "Hello from CLI"
# View inbox
dbbasic email:inbox john
# Send external email (queued)
dbbasic email:send user@example.com "Hello" "Test"
# View queue status
dbbasic email:queue
# Run worker (process SMTP queue)
dbbasic email:worker
How It Works
Local Mail (Unix-style)
mail('john', subject, body)
↓
Append to var/mail/john (mbox format)
↓
Instant delivery
External Email (SMTP)
send_email(to, subject, body)
↓
Queue via dbbasic-queue
↓
Worker picks up
↓
Send via SMTP (with retries)
Philosophy
Email is not a cloud service. Unix had local mail working in 1971. The web made it complicated. Let's return to simplicity.
- Unix Mail First: Local delivery to var/mail/{user}
- SMTP When Needed: External email via SMTP (like sendmail)
- Queue Integration: Uses dbbasic-queue for async delivery
- Plain Text First: Templates are just string formatting
- No Service Required: Works without external email service
Full Documentation
See the specification for complete details.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dbbasic_email-1.0.0.tar.gz.
File metadata
- Download URL: dbbasic_email-1.0.0.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
841e714b57527fe5d176691f304ae471b8481935ffbf5de6eb9ecaed87564568
|
|
| MD5 |
f9d911ad2db2c96cc75df4685c7b872f
|
|
| BLAKE2b-256 |
3699190520de20670f95d5514bd86ae2b9e3aa4c388a5a72d31f5a8bc0b11211
|
File details
Details for the file dbbasic_email-1.0.0-py3-none-any.whl.
File metadata
- Download URL: dbbasic_email-1.0.0-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bccaff699e79786086985a369655e484d69c72ea107ed6b6c53c9e0b592d9258
|
|
| MD5 |
dc1dc8ad59dd77560f9650eefb80aeb8
|
|
| BLAKE2b-256 |
efa37ee312a67c183956c8381d2c708a77cbdf71e82886b4e7519640bbebee1d
|