Emailing System for visually impaired persons
๐ Voice Email
A voice-controlled email client for everyone โ accessible, modern, and runs on any device.
What's New in v2
| Feature | v1 (2019) | v2 (Now) | |---|---|---| | Auth | Plain password in source code โ | OAuth2 (Gmail) + App Passwords โ | | Audio | pyglet + temp MP3 files | Web Speech API (no files) โ | | Email API | Gmail SMTP (broken since 2024) | Gmail REST API + generic IMAP โ | | Mobile | None | Full PWA โ install on any phone โ | | Features | Send, read | Send, read, reply, delete, mark as read, contact book โ | | Structure | Single flat script | Modular packages + REST API โ |
Features
- Send email by voice or keyboard
- Read inbox aloud with text-to-speech
- Reply to emails by voice
- Delete / Mark as read any email
- Contact book with voice-search autocomplete
- Works on any phone โ installable PWA (no app store needed)
- Providers: Gmail (OAuth2), Yahoo Mail, any IMAP/SMTP server
Architecture
Flask Backend (Python) PWA Frontend (Browser)
โ โ
โโโ auth/gmail_oauth.py โโโ Web Speech API (STT)
โโโ auth/imap_auth.py โโโ SpeechSynthesis (TTS)
โโโ email_client/reader.py โโโ Service Worker (offline)
โโโ email_client/sender.py โโโ Installable manifest
โโโ email_client/contacts.py
โโโ app.py (REST API + serve PWA)
Setup
1. Clone & Install
git clone https://github.com/hacky1997/voice-based-email-for-blind.git
cd voice-based-email-for-blind
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
2. Configure .env
cp .env.example .env
Edit .env with your credentials
3. Provider-specific setup
Gmail (OAuth2)
- Go to Google Cloud Console
- Create a project โ Enable Gmail API
- Create OAuth 2.0 credentials (Web Application)
- Add
http://localhost:5000/api/auth/gmail/callbackas a redirect URI - Copy Client ID and Secret into
.env
Yahoo Mail
- Go to Yahoo Account Security
- Generate an App Password
- Use that (not your main password) when signing in
Generic IMAP
Enter your IMAP/SMTP host and port in the "Advanced" section of the login screen. Make sure IMAP is enabled in your email provider's settings.
4. Run
# Desktop only
python app.py
LAN access (required for mobile PWA)
python app.py --host 0.0.0.0
Then open http://localhost:5000 in your browser.
Mobile / Phone Access
Since this is a Progressive Web App (PWA):
- Start the server with
--host 0.0.0.0 - Find your computer's local IP:
ip addr(Linux) /ipconfig(Windows) - Open
http://<your-local-ip>:5000in Chrome or Safari on your phone - Tap "Add to Home Screen" to install it like an app
Note: Web Speech API requires HTTPS on mobile (except localhost).
For production deployment, use a service like Railway or
Fly.io which provide free HTTPS.
Voice Commands
| Sayโฆ | Action | |---|---| | "Open inbox" | Load your inbox | | "Read email" | Open the latest email | | "Read aloud" | Speak the open email | | "Next email" | Navigate to next | | "Reply" | Reply to open email | | "Delete" | Trash open email | | "Mark as read" | Mark open email read | | "Compose email" | Open compose screen | | "Contacts" | Open contact book | | "Sign out" | Disconnect |
Project Structure
voice-email/
โโโ app.py # Flask app, REST API, serves PWA
โโโ config.py # Environment config
โโโ requirements.txt
โโโ .env.example
โโโ auth/
โ โโโ gmail_oauth.py # Gmail OAuth2 flow
โ โโโ imap_auth.py # Generic IMAP/SMTP (Yahoo etc.)
โโโ email_client/
โ โโโ reader.py # List, fetch, delete, mark as read
โ โโโ sender.py # Send, reply
โ โโโ contacts.py # JSON contact book
โโโ static/ # PWA files (served by Flask)
โโโ index.html # Full single-page app
โโโ manifest.json # PWA manifest (installable)
โโโ sw.js # Service worker (offline)
Contributing
Issues and PRs are welcome. Please read CONTRIBUTING.md first.
License
MIT ยฉ Sayak Naskar