Current Version: v1.3.6 - "The Professional Foundation Release"
python -m venv venv
source venv/bin/activate # venv\Scripts\activate on Windows
pip install -r requirements.txt- Enable 2FA on your Google Account.
- Generate an App Password at Google App Passwords.
- Create a
.envfile from.env.example:SMTP_USER=your-email@gmail.com SMTP_PASSWORD=your-16-character-app-password SENDER_EMAIL=your-email@gmail.com
python manage.py migrate
python manage.py createsuperuserpython manage.py runserverVisit http://localhost:8000
- Secure login and signup system
- Only authenticated users can access the dashboard
- Session-based authentication
- Real-time statistics overview:
- Total emails sent
- Delivered emails
- Failed emails
- Pending emails
- Interactive charts with Chart.js
- Recent campaigns overview
- Delivery rate visualization
- Multiple Input Methods:
- Upload Excel (.xlsx) or CSV files with email lists
- Manual email entry (textarea)
- Advanced Features:
- HTML email templates support
- Personalization with placeholders ({name}, {email}, etc.)
- File attachments (Excel, PDF, etc.)
- Rate limiting (1-second delay between emails)
- SMTP Support:
- Gmail (Strictly using App Passwords)
- Localhost SMTP testing
- Create reusable email templates
- Edit and delete templates
- Use placeholders for dynamic content
- Auto-fill subject and body when selected
- Visual Analytics:
- Pie chart for email status breakdown
- Bar chart for daily email activity (last 30 days)
- Campaign performance metrics
- Export Options:
- Download analytics as CSV
- Detailed Metrics:
- Delivery rate per campaign
- Success/failure ratios
- Email status tracking
- View all campaigns with status
- Detailed campaign view with:
- Progress bars
- Email list with individual statuses
- Error messages for failed emails
- Campaign status tracking (Pending, In Progress, Completed, Failed)
- Environment variables for sensitive data (.env)
- SMTP passwords never stored in code
- CSRF protection
- SQL injection prevention (Django ORM)
- Rate limiting to prevent email provider blocking
- Secure file upload handling
- Python 3.8 or higher
- pip (Python package manager)
- Virtual environment (recommended)
git clone <repository-url>
cd bulk_email_dashboard# Windows
python -m venv venv
venv\Scripts\activate
# Linux/Mac
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txt- Copy
.env.exampleto.env:
cp .env.example .env- Edit
.envand add your SMTP credentials:
# Django Settings
SECRET_KEY=your-secret-key-here
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
# SMTP Configuration (Gmail Example)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password-here
SENDER_EMAIL=your-email@gmail.com
SENDER_NAME=Bulk Email Dashboardpython manage.py makemigrations
python manage.py migratepython manage.py createsuperuserFollow the prompts to create an admin account.
python manage.py runserverVisit http://127.0.0.1:8000 in your browser.
- Enable 2-Factor Authentication on your Google account
- Generate App Password:
- Go to: https://myaccount.google.com/apppasswords
- Select "Mail" and your device
- Copy the 16-character password
- Update .env:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-16-char-app-password
SENDER_EMAIL=your-email@gmail.comOutlook:
SMTP_HOST=smtp-mail.outlook.com
SMTP_PORT=587
SMTP_USER=your-email@outlook.com
SMTP_PASSWORD=your-passwordYahoo:
SMTP_HOST=smtp.mail.yahoo.com
SMTP_PORT=587
SMTP_USER=your-email@yahoo.com
SMTP_PASSWORD=your-app-passwordSendGrid:
SMTP_HOST=smtp.sendgrid.net
SMTP_PORT=587
SMTP_USER=apikey
SMTP_PASSWORD=your-sendgrid-api-keyemail,name,company
john@example.com,John Doe,Acme Corp
jane@example.com,Jane Smith,Tech IncCreate an Excel file with columns:
email(required)name(optional)company(optional)- Any other custom fields
Use placeholders in your email subject and body:
{email}- Recipient's email{name}- Recipient's name{company}- Company name{any_column}- Any column from your file
Example:
<h1>Hello {name}!</h1>
<p>Thank you for your interest, {name}.</p>
<p>We'll contact you at {email}.</p>- Backend: Django 4.2
- Frontend: HTML5, CSS3, Bootstrap 5
- Charts: Chart.js
- Icons: Bootstrap Icons
- Database: SQLite (local only)
- Environment: python-decouple (.env)
- Email: Django SMTP Backend
bulk_email_dashboard/
βββ bulk_email_dashboard/ # Project settings
β βββ settings.py
β βββ urls.py
β βββ wsgi.py
βββ emails/ # Main app
β βββ migrations/
β βββ templates/
β β βββ emails/
β β βββ base.html
β β βββ dashboard.html
β β βββ login.html
β β βββ signup.html
β β βββ send_email.html
β β βββ campaigns.html
β β βββ campaign_detail.html
β β βββ templates.html
β β βββ template_edit.html
β β βββ template_confirm_delete.html
β β βββ analytics.html
β βββ static/
β β βββ css/
β β βββ js/
β βββ models.py
β βββ views.py
β βββ forms.py
β βββ urls.py
β βββ admin.py
β βββ utils.py
βββ media/ # Uploaded files
β βββ uploads/
β βββ attachments/
β βββ email_lists/
βββ .env # Environment variables (not in git)
βββ .env.example # Example environment file
βββ .gitignore
βββ requirements.txt
βββ manage.py
βββ README.md
Access the Django admin panel at http://127.0.0.1:8000/admin/
Features:
- View all users
- Manage campaigns
- View email statistics
- Monitor failed emails
- Access all email templates
- Gmail: Make sure you're using an App Password, not your regular password
- 2FA: Enable 2-Factor Authentication before generating App Password
- Less Secure Apps: Gmail no longer supports this; use App Passwords
- Add SPF and DKIM records to your domain
- Warm up your email account (start with small batches)
- Avoid spam trigger words
- Include unsubscribe links
- Gmail free accounts: 500 emails per day.
- Recommended: 1 email per second (the app handles this automatically).
- DEBUG = True is enabled for local troubleshooting.
- Check file format (CSV or Excel)
- Ensure "email" column exists
- Verify file size (max 10MB recommended)
- Email scheduling
- A/B testing
- Email open tracking
- Click tracking
- Unsubscribe management
- Email verification
- Advanced segmentation
- Multi-language support
- API integration
- Webhook support
This project is dual-licensed under the MIT License and the Apache License 2.0.
For information on how to report a security vulnerability, please see our Security Policy.
Created with β€οΈ by Yusuf
Contributions, issues, and feature requests are welcome! See our Contributing Guidelines for more details.
Give a βοΈ if this project helped you!
Note: This application is for educational purposes. Always comply with email marketing laws (CAN-SPAM, GDPR, etc.) when sending bulk emails.