Standard operating procedure
1 · One-time setup
- Microsoft (personal account): a one-time setup so the app may sign you in — no IT department needed:
- Go to
portal.azure.comand sign in with your personal Microsoft account (your outlook.com / hotmail.com address — not your work account). - Use the search bar at the top to open App registrations, then click New registration.
- Name it
WizMerge-Omni. Under "Supported account types" choose Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts. (If you pick Personal Microsoft accounts only instead, set the Tenant ID toconsumersin the app later — either choice works.) - Under Redirect URI, pick Single-page application (SPA) from the dropdown and enter
http://localhost:8000. (When the app gets a permanent address later, you will add that here too.) - Click Register. On the overview page that opens, copy the Application (client) ID.
- On the left menu open API permissions → Add a permission → Microsoft Graph → Delegated permissions. Tick
Mail.ReadWriteandMail.Send, then click Add permissions. - Back in WizMerge-Omni, paste the Client ID into the Microsoft configuration panel above and save. Leave the Tenant ID as
common— unless you chose "personal accounts only" in step c, in which case set it toconsumers. (If you get it wrong, the app detects the error at sign-in and switches by itself.)
- Go to
- Gmail: create a free Google Cloud project at
console.cloud.google.com: turn on the Gmail API, set the OAuth consent screen to External, add your Gmail address under Test users, then create an OAuth Client ID (Web application). Under "Authorized JavaScript origins" add the address you open this page from (http://localhost:8000for localhost testing). Paste the Client ID above and save. - Open the Inboxes tab and connect each mailbox. Google will show an "unverified app" warning the first time — that's expected for a personal project; click through it. You can connect several accounts, even two Gmails.
2 · Template Manager
- Upload your contact spreadsheet to extract
{{HeaderName}}merge tags. - Pick a Send from inbox — the default inbox for rows whose
Inboxcolumn is blank. (You can also leave it unset and route every row by itsInboxcolumn.) - Compose To / CC / BCC, subject, body and signature. Click any chip to insert its tag at the cursor.
- Save the template. Attachments added here apply to the current session only and go to every email in the merge.
3 · Mail Merger
- Pick a saved template, then drop in the contact list file.
- Per-row inbox routing (optional): add an
Inboxcolumn to your contact list and write each row's inbox email address in it. Blank cells use the template's "Send from inbox". - Press Check data to see the routing preview — which rows go through which inbox — before anything happens.
- Press Create Drafts. One personalized draft per row lands in the Drafts folder of its routed inbox. Review and send the drafts from Outlook / Gmail when ready.
4 · Email Tester
- Select a template, fill the detected variables, and preview the merged email exactly as it will go out.
- This tab is preview-only — nothing is sent. To send for real, use the Mail Merger.
5 · Audit Logger
Every parse, draft, dispatch and settings change is recorded with a timestamp. Filter the history, watch the live diagnostics console, and export to CSV or JSON for your records.
Localhost testing
Open a terminal in the folder you unzipped, run python3 -m http.server 8000, then open http://localhost:8000 in your browser. This is a separate test copy — your production WizMerge is untouched.
Privacy note
Everything runs in this browser. Your Microsoft and Google sign-ins go directly to Microsoft and Google; templates, settings and sign-in tokens stay in this browser's local storage. Nothing is uploaded to any WizMerge server — there isn't one.