SahajMails
Send personalized bulk emails — Free, Secure, Simple
No servers. No coding. Just upload, type, send.
Features
- 100% Local: Your data never leaves your device
- Gmail App Password: Secure authentication (no real password used)
- CSV/Excel Upload: Supports
.csv,.xlsx,.xls - Smart Placeholders:
{{ firstName }}— case and space tolerant - Live Preview: Real-time HTML rendering
- Test Email: Send to yourself before bulk
- Attachments: PDFs, images, documents
- Progress Tracking: Real-time log and progress bar
- Markdown & HTML: Full email formatting support
- Gmail-Safe: 2-second delay between sends
Quick Start
pip install sahajmails
sahajmails
7-Step Guide
- Upload your contact list (must have
emailcolumn) - Enter your Gmail and App Password
- Compose email using
{{ columnName }}placeholders - Click placeholder buttons to copy instantly
- Attach files (optional)
- Preview → Send Test Email
- Start Bulk Send → Watch progress
Example CSV:
email,firstName,company
alice@example.com,Alice,Acme Corp
bob@work.com,Bob,StartupXYZ
Gmail App Password (Required)
- Go to myaccount.google.com/security
- Enable 2-Step Verification
- Search "App Passwords"
- Select App name → Generate
- Copy the 16-character password → paste in the app
Installation
pip install sahajmails
Or from source:
git clone https://github.com/sahajrajmalla/sahajmails.git
cd sahajmails
pip install -e .
Development
# Install dev dependencies
pip install -e .[dev]
# Run tests
pytest tests/
# Build package
python -m build
Contributing
Contributions are welcome!
- Fork the repo
- Create a branch:
git checkout -b feature/your-idea - Commit changes:
git commit -m "feat: add X" - Push and open a Pull Request
Please follow PEP 8 and include tests.
Security & Privacy
- Runs entirely on your machine
- No data is stored or transmitted
- Open source under MIT License
- Uses Gmail App Passwords only
License
MIT License – Free for personal and commercial use.
Made with ❤️ by Sahaj Raj Malla
Release files for sahajmails 1.0.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 | |
|---|---|---|---|
| sahajmails-1.0.1.tar.gz | 11.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sahajmails-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.2 kB
Release files / sahajmails-1.0.1.tar.gz
| Download URL | sahajmails-1.0.1.tar.gz |
|---|---|
| Size | 11.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
76fea8741c882f4890e11a6106a2ddddfb7c3f162d6db79100b2c8ef928fbf1c
|
|
BLAKE2b-256 checksum How to use checksums |
f72bd4136b2cd0b94072334898e4f16f2e23f449c1aa3d8c161d697448870bfe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / sahajmails-1.0.1-py3-none-any.whl
| Download URL | sahajmails-1.0.1-py3-none-any.whl |
|---|---|
| Size | 11.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c3729e622ca1ad8900ff251b1d70d72df17f7d92bfc8a89e3aad29bb5527e363
|
|
BLAKE2b-256 checksum How to use checksums |
7366ceb90508578151da4105d6a6b039ce4235eb713b63851e7d5419801ba8b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|