Quick Start
Activity Log
No activity yet
Backend Required for Real Sending
Gmail SMTP requires the Python backend running locally. Click Backend Setup → download backend.py → run it → connect. Without the backend, the app runs in Simulation Mode.
Gmail Accounts
Upload up to 10 Gmail JSON files — sent sequentially: 200 emails per account via Gmail SMTP
Bulk Import
0 / 10Drop Gmail JSON files here
Service Account or OAuth2 Client JSON
Select up to 10 files — Gmail SMTP sequential blast
Cloud Console → Service Accounts → Keys
Cloud Console → OAuth 2.0 Client IDs
Account Slots
10 slotsAfter 200 sends, the campaign auto-rotates to the next account.
Security Guarantee
Passwords never stored. Tokens held in localStorage only. Access tokens auto-renewed via refresh token every ~1 hour.
Sequential Sending Flow
Auto-rotationNo Gmail accounts connected
Upload Service Account or OAuth2 JSON credential files to get started
- 1Go to Google Cloud Console
- 2IAM & Admin → Service Accounts → Create
- 3Enable Gmail API + domain-wide delegation
- 4Keys → Add Key → JSON → Download
- 5Upload here — max 10 files
- 1Go to Google Cloud Console
- 2Credentials → OAuth 2.0 Client ID → Desktop App
- 3Click Download JSON
- 4Upload here → click Authorize on the card
- 5Run backend.py to complete token exchange
Send Campaign
Configure and launch your email blast — all settings in one place
Sender Accounts
No Gmail accounts loaded —
Recipients
Maximum 2,000 per campaign
Subject Lines
Send Rate
Delays help respect Gmail rate limits. Do not set too low.
Message Body
Drop image here or click
Attachment
Drop file or click
Supports: %RandomInvoiceNumber%, %CustomerEmail%
Variable Overrides
Ready to Send
Send Logs
Per-message send records — status updated from provider response only
| # | Recipient | Sender Account | Subject | Time | Status | Response | |
|---|---|---|---|---|---|---|---|
| No messages yet | |||||||
Recipients
Import via CSV or TXT — JSON files are NOT used for recipients
Note: JSON files are used only for Gmail accounts. Import recipients via CSV or TXT files, or paste manually below.
Import CSV
Drop CSV or click
Columns: Email, FirstName, LastName, CompanyName, CompanyPhone, Address, CustomField1, CustomField2
Import TXT
One email per line
One valid email address per line
Manual Entry
| First Name | Last Name | Company | Phone | Status | ||
|---|---|---|---|---|---|---|
| No recipients loaded | ||||||
Subject Lines
Up to 1,000 subjects — one selected randomly per email
| # | Subject Line | Actions |
|---|---|---|
| No subjects added | ||
Email Templates
Plain text and HTML templates with dynamic variable support
Click to copy variable placeholder:
No templates yet
HTML Invoice Templates
Bulk upload — sent sequentially (Invoice 1 → Recipient 1, Invoice 2 → Recipient 2...)
Drop HTML invoice files here
Each HTML file will be assigned to recipients sequentially — variables substituted per recipient
Invoice Processing Pipeline
Invoice Number Generator — %RandomInvoiceNumber%
Example outputs: INV-2541D-CD142-AZIZ-142 · ORD-14566-52GHGJ-JG4452-GHRT12 · RF144-HDGJK-271GJ-SHNGF514
Random Total Generator — %RandomTotal%
Amounts generated: $300.00, $349.00, $400.00, $785.00, $1,249.00 (example)
No invoice templates loaded
Company Phone Numbers
Manage phone numbers for %CompanyPhone% — imported randomly per email
Bulk import: TXT or CSV file with one phone per line (optionally: phone,label)
| # | Phone Number | Label | |
|---|---|---|---|
| No phone numbers added | |||
Backend Setup
Python Flask backend for real Gmail SMTP/API sending
Step 1Install Dependencies
Step 2Download & Run Backend
Step 3Start & Connect
Settings
Rate Limiting
The application respects Gmail sending limits. Free Gmail: ~500/day. Google Workspace: ~2,000/day. Do not attempt to bypass these limits.