python main.pyOr use the original version:
python sender.py-
Click the 🔌 Connect SMTP button in the top toolbar
-
Enter your email credentials:
-
Gmail Users:
- Server:
smtp.gmail.com - Port:
587 - Email: Your Gmail address
- Password: App Password (not your regular password)
- Server:
-
Outlook/Hotmail Users:
- Server:
smtp.office365.com - Port:
587
- Server:
-
-
Click Connect
-
Credentials are saved automatically for next time!
- Go to 👥 Recipients tab
- Import CSV/TXT file OR paste emails manually
- Formats supported:
john@example.com john@example.com,John Doe john@example.com,John Doe,https://custom-link.com
- Go to ✉️ Compose tab
- Enter subject (optional - auto-generated if empty)
- Write HTML email content
- Use placeholders:
{{name}},{{link}},{{qrcode}} - Upload image if needed
- Preview updates in real-time!
- Go to 🚀 Send tab
- Review campaign summary
- Click Start Campaign
- Monitor progress with real-time status log
Step 1: Prepare QR Codes
- Put your QR code images in
data/qrcodes/folder - Click "📁 Open QR Folder" button in Recipients tab
Step 2: Create CSV Create a CSV file with this structure:
id,email,QRCode_Image,Name
1,john@example.com,data/qrcodes/john_qr.png,John Doe
2,jane@example.com,data/qrcodes/jane_qr.png,Jane Smith
3,bob@example.com,data/qrcodes/bob_qr.png,Bob JohnsonStep 3: Import & Send
- Import CSV in Recipients tab
- Use
{{qrcode}}placeholder in email template - Each recipient gets their own QR code!
Helper Buttons in Recipients Tab:
- 📱 Browse QR Codes - See available QR codes
- 📁 Open QR Folder - Add QR code images
- 📖 Show CSV Example - Get copy-paste template
Note: Header row is optional - the app auto-detects it!
📚 Detailed Guide: See data/QR_CODE_GUIDE.md
- Enable 2-Factor Authentication in Google Account
- Go to: https://myaccount.google.com/apppasswords
- Generate App Password for "Mail"
- Use this password (not your regular password) in SMTP settings
{{name}}- Replaced with recipient name from CSV{{link}}- Replaced with custom link per recipient{{qrcode}}- Embeds QR code image inline
- Use Beefree to design beautiful HTML emails
- Export as HTML and paste into Compose tab
- Images can be embedded directly (no external hosting needed)
Connection Failed?
- Verify SMTP settings (server, port, email, password)
- Gmail: Use App Password, not regular password
- Check firewall/antivirus settings
Emails Not Sending?
- Ensure connection is established (green dot indicator)
- Verify recipients format is correct
- Check email content is not empty
- Check provider's sending limits (Gmail: ~500/day)
QR Codes Not Working?
- Verify file paths are correct (relative to project root)
- Check file exists and is readable
- Supported: PNG, JPG, JPEG, GIF, BMP
Email_sender/
├── app/ # Application source code
│ ├── config.py # Configuration management
│ ├── email_sender.py # Email sending logic
│ ├── html_parser.py # HTML parsing
│ └── ui/ # UI components
│ ├── smtp_tab.py # SMTP settings tab
│ ├── recipients_tab.py # Recipients management
│ ├── compose_tab.py # Email composition
│ ├── send_tab.py # Campaign sending
│ ├── connection_dialog.py
│ ├── main_window.py # Main application
│ ├── styles.py # UI styling
│ └── tab_base.py # Base tab class
│
├── config/ # Configuration storage
│ └── smtp_config.json # SMTP credentials (auto-created)
│
├── data/ # Data files
│ └── data.csv # Sample recipient data
│
├── templates/ # Email templates
│
├── main.py # Application entry point
├── sender.py # Original version
├── README.md # Full documentation
└── requirement.txt # Dependencies info
✅ Ultra-Modern Dark UI - Vibrant accents, smooth animations
✅ Persistent Login - Auto-reconnect on startup
✅ Live Preview - Real-time email preview before sending
✅ Image Embedding - No external hosting needed
✅ QR Code Support - Dynamic attachment per recipient
✅ Progress Tracking - Real-time status log with timestamps
✅ Default Subject - Auto-generated if empty
✅ Modular Code - Clean, maintainable architecture
- Edit
app/email_sender.pyfor email logic - Edit
app/ui/*.pyfor UI changes - Edit
app/ui/styles.pyfor styling
- Create file in
app/ui/ - Inherit from
TabBase - Implement
create_widgets()method - Import and add to
main_window.py
For issues or questions:
- Check README.md for detailed documentation
- Review code comments for implementation details
- Modify as needed for your use case
Enjoy sending beautiful email campaigns! 🚀