- Overview
- Key Features
- Screenshots
- Installation
- Quick Start Guide
- Detailed Usage
- Configuration
- Technical Stack
- Project Architecture
- Contributing
- Troubleshooting
- License
- Contact & Support
Back in late 2023, I faced a recurring challenge: sending batches of documents via email with specific quality requirements and automated workflows. Traditional email clients fell short—they lacked the ability to:
- Convert PDFs to high-resolution images with precise DPI control
- Process multiple files from folders automatically
- Maintain consistent formatting and subject lines
- Remember preferences for repetitive tasks
- Provide the level of customization needed for professional document handling
Existing solutions were either too simplistic (basic email clients), too expensive (enterprise automation tools), or didn't address the specific combination of features I needed. I wanted a tool that could handle automated email sending, high-quality image conversion, and smart file management—all in one place, with full control over every aspect.
So I built EmailFlow—not just to solve my immediate problem, but as a learning journey to deeply understand Python development, GUI design, SMTP protocols, file processing, and user experience principles. Building this from scratch taught me how these systems work at a fundamental level, far beyond what tutorials could provide.
The application was ready well before its public release. After refining the interface and adding customization features based on real-world use, I decided to publish it on GitHub to help others facing similar challenges while sharing what I learned along the way.
EmailFlow is an open-source Python desktop application that streamlines repetitive email and file management workflows. Originally created for my own needs, it evolved into a comprehensive solution that I'm now sharing with the community. Built for professionals, students, and anyone who regularly sends batches of files via email, it combines three essential functionalities into one intuitive interface:
- Automated Email Sending with SMTP support and recipient management
- Batch PDF to Image Conversion with precise DPI control (10-1000 DPI)
- Smart File Management with preference persistence and automatic cleanup
Traditional email clients require multiple manual steps for batch operations. EmailFlow reduces this to just a few clicks:
- Select recipients from saved contacts (no retyping emails)
- Choose files via folder path or file browser
- Optionally convert PDFs to high-resolution images with your specified DPI
- Send with auto-generated or custom subject lines (date-based or manual)
- Automatically clean up files after sending (optional)
- Multi-recipient Management: Save and manage multiple email addresses
- SMTP Integration: Direct email sending via Gmail SMTP (587)
- Credential Security: Optional password encryption and on-screen hiding
- Smart Subject Lines: Auto-populate with current date (DD-MMM-YYYY format) or use custom subjects
- Attachment Handling: Automatically attach files or converted images
- High-Quality Conversion: Convert PDFs to JPEG images with customizable DPI (10-1000, default: 300)
- Batch Processing: Handle multiple PDFs simultaneously with progress tracking
- Standalone Conversion: Convert without sending emails via "SAVE IMAGE" feature
- Multi-threaded Processing: Background conversion for smooth UI performance
- Dual Selection Modes:
- Browse individual files with native file picker
- Process entire folders by entering directory path
- Files Showcase: Visual preview of selected files before processing
- Safe Deletion: Automatically move processed files to recycle bin (not permanent deletion)
- Buffer Management: Temporary folder system with automatic cleanup
- Full Theme Customization:
- Light/Dark mode toggle
- Custom colors for primary, secondary, menu, and hover elements
- Persistent theme preferences
- Settings Persistence: All preferences saved between sessions in encrypted JSON
- Internet Validation: Automatic connectivity check before sending
- Real-time Feedback: Progress bars and status notifications
- Clean Interface: Modern CustomTkinter UI with logical layout
Intuitive main interface with file showcase sidebar
Comfortable dark theme for extended use
Comprehensive color customization for all UI elements
DPI configuration and application management
Requirements: Windows 10 or later
- Visit the Releases page
- Download the latest
EmailFlow.zip - Extract to your preferred location
- Run
EmailFlow.exe
No Python installation required!
Requirements:
- Python 3.8 or higher
- pip package manager
- Poppler (for PDF conversion)
git clone https://github.com/Utkarsh-X/EmailFlow.git
cd EmailFlowpip install -r requirements.txtRequired packages:
customtkinter
CTkMessagebox
Pillow
pdf2image
tqdm
requests
send2trash
Windows:
- Download from poppler-windows releases
- Extract and add
binfolder to system PATH
Linux (Ubuntu/Debian):
sudo apt-get install poppler-utilsmacOS:
brew install popplerpython EmailFlow.py-
Launch Application
Run EmailFlow.exe or python EmailFlow.py -
Configure Sender Credentials
- Click "Enter Sender Email" → Enter your Gmail address
- Click "Enter your Password" → Enter your Gmail App Password
Important: For Gmail, you must use an App Password, not your regular password. Enable 2-factor authentication first, then generate an app password.
-
Add Recipients
- Click "Add User" button
- Enter recipient email address
- Repeat for multiple recipients
- Select from dropdown when sending
-
Configure Preferences (Optional)
- Open Settings menu (☰ icon)
- Set default DPI for image conversion
- Choose theme colors
- Enable/disable password hiding
- Select Recipient: Choose from dropdown or add new
- Choose Subject:
- Toggle "Subject as Date" for automatic date subject
- OR enter custom subject in "Enter Email Subject" field
- Select Files:
- Option A: Click "Browse Files" to pick individual files
- Option B: Enter folder path and click "SHOW FILES"
- Optional - Convert PDFs: Toggle "Convert to Image" if sending PDFs as images
- Send: Click "SEND EMAIL" button
- Wait for confirmation: "Uploaded successfully!" message appears
Adding Recipients:
1. Click "Add User" button
2. Enter email in dialog box
3. Email saved to dropdown automatically
Removing Recipients:
1. Select email from dropdown
2. Click "Delete User" button
3. Confirm deletion
Tip: All recipients persist between sessions in data.json
- Click segmented button → "Browse Files"
- Use native file picker to select multiple files
- Preview appears in "Files Showcase" sidebar
- Supports all file types
- Click segmented button → "Set Address" (default)
- Copy the folder path from your deafault File Explorer
- Paste complete folder path in text field
- Click "SHOW FILES" to load all files from folder
- All files in folder will be processed
Example path formats:
Windows: C:\Users\YourName\Documents\Files
Linux: /home/username/documents/files
macOS: /Users/username/Documents/Files
Accessing DPI Settings:
1. Click menu button (☰)
2. Select "Settings"
3. Find "Set DPI for generated images" section
4. Enter value between 10-1000 (default: 300)
DPI Guidelines:
| DPI | Use Case | File Size |
|---|---|---|
| 100-150 | Quick preview, screen viewing | Small |
| 200-300 | Standard documents, printing | Medium |
| 400-600 | High-quality prints, archival | Large |
| 700-1000 | Professional printing, detailed graphics | Very Large |
Converting Without Sending:
1. Select files/folder
2. Toggle "Convert to Image" ON
3. Click "SAVE IMAGE" button (not SEND EMAIL)
4. Choose destination folder
5. Converted images saved to selected location
Changing Theme Mode:
- Click sun/moon icon (top-right) to toggle light/dark mode
Custom Colors:
1. Click menu (☰) → "Change Theme"
2. Choose color category:
- Primary Color: Main buttons and switches
- Secondary Color: Action buttons (SEND, SAVE)
- Menu Color: Sidebar background
- Hover Color: Button hover effects
3. Select color from picker
4. Changes apply immediately
Resetting to Defaults:
Settings → "Default Color" button → Restart application
Switch Controls:
| Switch | Function | Default |
|---|---|---|
| Add Subject | Enable/disable subject field | ON |
| Subject as Date | Auto-populate subject with current date | ON |
| Convert to Image | Enable PDF → Image conversion | OFF |
| Delete files after email | Move files to recycle bin after successful send | ON |
| Always hide password | Mask password with asterisks on main screen | OFF |
Background Processing:
- PDF conversion runs in separate thread
- Progress bar shows conversion status
- UI remains responsive during operations
EmailFlow automatically creates and manages data.json in the application directory:
{
"mode": "light",
"var4dpi": "300",
"v2": "encrypted_password_string",
"v3": "sender@example.com",
"primary_color": "#1f6aa5",
"secondary_color": "#144870",
"menu_color": "#2d2d2d",
"hover_color": "#333333",
"switch_v_pass1": "off",
"list1": [
"recipient1@example.com",
"recipient2@example.com"
],
"switch_v_date1": "on",
"switch_v_sub1": "on",
"switch_v_img1": "off",
"switch_v_del1": "on",
"addre1": "C:\\Users\\Name\\Documents\\LastUsedFolder",
"recname1": "recipient1@example.com"
}| Key | Type | Description | Default |
|---|---|---|---|
mode |
string | UI theme (light/dark) | "light" |
var4dpi |
string | Image conversion DPI | "300" |
v2 |
string | Encrypted sender password | "" |
v3 |
string | Sender email address | "" |
primary_color |
string | Main UI color (hex) | "" |
secondary_color |
string | Action button color (hex) | "" |
menu_color |
string | Menu background color (hex) | "" |
hover_color |
string | Hover effect color (hex) | "" |
switch_v_pass1 |
string | Password hiding toggle (on/off) | "off" |
list1 |
array | Saved recipient emails | [] |
switch_v_date1 |
string | Date subject toggle (on/off) | "on" |
switch_v_sub1 |
string | Subject field toggle (on/off) | "on" |
switch_v_img1 |
string | PDF conversion toggle (on/off) | "off" |
switch_v_del1 |
string | Auto-delete toggle (on/off) | "on" |
addre1 |
string | Last used folder path | "" |
recname1 |
string | Last selected recipient | "" |
While not recommended, you can manually edit data.json:
- Close EmailFlow completely
- Edit
data.jsonwith text editor - Ensure JSON syntax is valid
- Restart application
Resetting Configuration:
Settings → "Reset Application" button → Restart
This deletes data.json and restores all defaults.
| Technology | Version | Purpose |
|---|---|---|
| Python | 3.8+ | Core language (100% Python codebase) |
| CustomTkinter | 5.0+ | Modern Tkinter-based UI framework |
| CTkMessagebox | 2.5+ | Enhanced dialog boxes and notifications |
| Pillow (PIL) | 9.0+ | Image processing and manipulation |
| pdf2image | 1.16+ | PDF to image conversion via Poppler |
| Poppler | Latest | PDF rendering engine |
| smtplib | Standard lib | SMTP email protocol implementation |
| tqdm | 4.65+ | Progress bar visualization |
| requests | 2.28+ | HTTP requests for connectivity checks |
| send2trash | 1.8+ | Safe file deletion (recycle bin) |
- MVC-inspired Structure: Separation between UI (EmailFlow.py) and component logic (advmail.py)
- Multi-threading: Background processing for PDF conversion and email sending
- Event-driven UI: Tkinter event loop with callback functions
- State Persistence: JSON-based configuration with automatic save/load
- Graceful Degradation: Continues operation even if optional features fail
EmailFlow/
│
├── assets/ # Static resources
│ ├── clicktodark.png # Dark mode toggle icon (21x21)
│ ├── clicktolight.png # Light mode toggle icon (21x21)
│ ├── emailB.ico # Application icon (light)
│ ├── emailL.ico # Application icon (dark)
│ └── emailFlow_banner.png # Banner image for README
│
├── screenshots/ # Documentation screenshots
│ ├── Home Page.png
│ ├── Dark Home Page.png
│ ├── Settings Menu.png
│ ├── About the software section.png
│ └── Choose multiple color customization....png
│
├── EmailFlow.py # Main application GUI
├── advmail.py # Backend logic module
├── version.py # Version tracking
├── requirements.txt # Python dependencies
├── data.json # User configuration (auto-generated)
│
├── LICENSE # MIT License
└── README.md # This file
Responsibilities:
- Complete UI implementation using CustomTkinter
- User input handling and validation
- Theme management and customization
- Settings persistence (save/load from JSON)
- Integration with backend functions
Key Components:
- Frame-based layout system
- Switch toggles for feature control
- Segmented buttons for mode selection
- Scrollable file showcase sidebar
- Color picker dialogs
- Modal dialogs for input
Responsibilities:
- SMTP email transmission
- PDF to image conversion pipeline
- File system operations (list, copy, delete)
- Internet connectivity verification
- Credential validation
- Temporary folder management
User Input (EmailFlow.py)
↓
Validation & Processing (EmailFlow.py)
↓
Backend Function Calls (advmail.py)
↓
SMTP Server / File System
↓
Status Notifications (EmailFlow.py)
↓
Configuration Save (data.json)
Contributions are welcome and appreciated! Whether you're fixing bugs, adding features, or improving documentation, your help makes EmailFlow better.
-
Fork and Clone
git clone https://github.com/YOUR_USERNAME/EmailFlow.git cd EmailFlow -
Create Virtual Environment
python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows
-
Install Development Dependencies
pip install -r requirements.txt
-
Create Feature Branch
git checkout -b feature/your-feature-name
Code Standards:
- Follow PEP 8 style guide
- Use descriptive variable names
- Add comments for complex logic
- Keep functions focused and modular
- Maintain existing code structure
Testing Requirements:
- Test on Windows (primary platform)
- Verify UI changes in both light/dark themes
- Test with various file types and sizes
- Ensure backward compatibility with existing data.json
Pull Request Process:
- Update README if adding features
- Test thoroughly across different scenarios
- Provide clear description of changes
- Reference any related issues
- Wait for code review and address feedback
High Priority:
- Multiple SMTP provider support (Gmail, Outlook, Yahoo, custom servers)
- Enhanced encryption for stored passwords
- Comprehensive error logging system
- Unit test suite
Medium Priority:
- Internationalization (i18n) support
- Export email history to CSV/Excel
- Scheduled/delayed email sending
- Email templates system
Nice to Have:
- macOS and Linux testing/optimization
- Drag-and-drop file selection
- Email signature support
- Attachment size warnings
- Dark mode refinements
Before Submitting:
- Check existing Issues
- Verify you're using the latest version
- Try reproducing with default settings
Include in Report:
- EmailFlow version
- Operating system and version
- Python version (if running from source)
- Steps to reproduce
- Expected vs actual behavior
- Screenshots/error messages
- data.json contents (remove sensitive info)
Cause: Incorrect email/password or Gmail security settings
Solutions:
- Verify email address is correct
- For Gmail users:
- Enable 2-factor authentication
- Generate App Password at https://myaccount.google.com/apppasswords
- Use App Password instead of regular password
- Check internet connection
- Verify SMTP server is accessible
Error: "Poppler not found" or conversion hangs
Solutions:
- Verify Poppler is installed:
# Windows: Check PATH includes poppler/bin # Linux: dpkg -l | grep poppler # Mac: brew list poppler
- Reinstall Poppler following installation guide
- Check PDF isn't corrupted (try opening in Adobe Reader)
- Reduce DPI if file is very large
Cause: Invalid folder path or permission issues
Solutions:
- Verify folder path is complete and correct
- Use forward slashes (/) or escaped backslashes (\) on Windows
- Check folder isn't empty
- Ensure you have read permissions for folder
- Click "SHOW FILES" button after entering path
Solutions:
- Check Python version:
python --version(must be 3.8+) - Reinstall dependencies:
pip install -r requirements.txt --force-reinstall - Delete data.json and restart
- Check for conflicting tkinter installations
- Run from command line to see error messages
Solutions:
- Update CustomTkinter:
pip install --upgrade customtkinter - Try resetting custom colors (Settings → Default Color)
- Toggle between light/dark mode
- Restart application
- Delete data.json and reconfigure
- Documentation: Review this README thoroughly
- Issues: Search GitHub Issues
- New Issue: Open detailed bug report with system info
- Discussions: For questions and feature requests
Developer: Utkarsh-X
Links:
- GitHub Profile: @Utkarsh-X
- Project Repository: EmailFlow
- Issue Tracker: Issues
- Latest Release: Releases
For Bugs:
- Check existing issues
- Open new issue with detailed information
- Include screenshots and error logs
For Feature Requests:
- Open GitHub issue with "Feature Request" label
- Describe use case and expected behavior
- Explain why feature would be valuable
For General Questions:
- Open GitHub Discussion
- Check README and documentation first
| Version | Date | Changes |
|---|---|---|
| v1.5.01 | Sep 2025 | Bug fixes, UI improvements, enhanced security |
| v1.4.22 | Aug 2025 | Performance optimizations, stability improvements |
| v1.3.x | 2024 | Feature additions and refinements (Not available online) |
| v1.0.x | 2024 | Initial releases (Not available online) |
See full release notes for detailed changelog.
If EmailFlow helps streamline your workflow, please consider:
- ⭐ Star this repository - Helps others discover the project
- 🐛 Report bugs - Improves stability for everyone
- 💡 Suggest features - Shapes future development
- 🤝 Contribute code - Makes EmailFlow better
- 📢 Share with others - Grows the community
