smail
Minimal email client for iCloud. Perfect for iCloud email aliases.
Installation
# Install with uv (recommended)
uv tool install simplemail-cli
# Or use pipx
pipx install simplemail-cli
Features
- Thread visualization with tree display
- Rich formatting with unread indicators
- Thread navigation (
smail 0.1,smail 0.last) - Quick self-email (
smail "reminder" "buy milk") - Secure keychain password storage
- Reply tracking with proper threading
- Archive emails to iCloud Archive folder
- Unarchive emails (move back from Archive to Inbox)
- Attachments
- Performance optimization (connection reuse, parallel fetch)
- local
smail.tomlwith just alias, so one can config per project email
Setup
1. Create App-Specific Password
- Go to appleid.apple.com
- Sign in and navigate to "Sign-In and Security"
- Select "App-Specific Passwords"
- Click the "+" button to generate a new password
2. Create iCloud Email Alias (optional)
- Go to iCloud Mail settings
- Click Settings → Accounts → Add Alias
- Create an alias (e.g., yourname+smail@icloud.com)
- Use this alias in your smail config to keep CLI emails separate
3. Configure smail
# First run guides you through setup
smail
# Or manually create config
cat > ~/.config/smail/config.toml << EOF
email = "your@icloud.com" # your email alias address, will send emails from here and only show emails for this account
login = "your.appleid@icloud.com" # Apple ID if different from email
keychain = "your-keychain-service"
EOF
4. Add Password to Keychain
# Add password from command line (macOS)
security add-generic-password \
-a "your.appleid@icloud.com" \
-s "your-keychain-service" \
-w "your-app-specific-password"
# Or let smail prompt you on first run
smail
Usage
# List & Read
smail # List emails
smail 0 # Read email/thread
smail 0.1 # Read specific message in thread
smail 0.last # Read newest message in thread
# Send
smail "Subject" "Body" # Send to self
smail user@example.com "Subject" "Body" # Send to recipient
# Reply, Archive & Delete
smail reply "Quick reply" # Reply to latest
smail 0 reply "Reply text" # Reply to specific
smail 0 archive # Archive email/thread
smail 0 delete # Delete email/thread
Security
- Passwords are stored in macOS Keychain, never in files
- Always use app-specific passwords, not your main Apple ID password
- The keychain service name in config.toml should match the one used in the
securitycommand
Metadata
Release files for simplemail-cli 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| simplemail_cli-0.1.1.tar.gz | 13.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| simplemail_cli-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.9 kB
Release files / simplemail_cli-0.1.1.tar.gz
| Download URL | simplemail_cli-0.1.1.tar.gz |
|---|---|
| Size | 13.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
349ef4da4f3558bc633564c2f5bf96cc13173a0724693ff23f807e21f7be0563
|
|
BLAKE2b-256 checksum How to use checksums |
1ba4375912649e469664a7ab8f6393a5bc07c0c36e686a61871417ef1aefe18a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 16, 2025.
Transparency logRelease files / simplemail_cli-0.1.1-py3-none-any.whl
| Download URL | simplemail_cli-0.1.1-py3-none-any.whl |
|---|---|
| Size | 14.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b915fef8f2d6e9a22f4de21f01f4401b30e62a4f148d56912c0cc30f5df8b3c2
|
|
BLAKE2b-256 checksum How to use checksums |
cc29152327bad75a587c60a1937c12191d7fe0093b23ca1af8f9eb3f9384d848
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 16, 2025.
Transparency log