✉

WizMerge-Omni

multi-inbox mail merge · client-side SPA

No inboxes connected

Connected inboxes

Connect the mailboxes you want to merge from. You can connect several at once — even two accounts from the same provider. Every sign-in happens in your browser, directly with the provider. Nothing passes through any WizMerge server (there isn't one).

Microsoft 365 / Outlook

Sign in with your personal Microsoft account (outlook.com / hotmail.com) — not your work account. Needs a one-time setup: your own free app registration (plain steps in the Instructions tab). No IT department involved.

Not connected.

Gmail

Needs a one-time setup: a free Google Cloud project with the Gmail API turned on (plain steps in the Instructions tab). Google will show an "unverified app" warning the first time — that's expected for a personal project.

Not connected.

iCloud Mail

Not available in this browser version. Apple offers no sign-in for mail that a web page can use. Connecting iCloud would need a small helper program on your computer — a possible later addition, not faked here.

Proton Mail

Not available in this browser version. Proton offers no mail API for web pages; the only route is Proton Bridge (paid Proton plans) plus a helper program on your computer — a possible later addition, not faked here.

Data source & merge tags

Upload an Excel or CSV file to extract column headers as {{MergeTag}} chips. Tip: add an Inbox column to route each row to a specific inbox in the Mail Merger.

Merge tag chips

No data file loaded yet.

Saved templates

Template

To (supports {{tags}} and plain addresses, comma-separated)
CC
BCC
Body
Signature
Attachments (session only — not saved with the template)
Drag & drop files here, or

    1 · Choose template

    2 · Contact list

    Add an Inbox column to send different rows from different inboxes. Write the inbox's email address (or its label) in each row — blank rows use the template's "Send from inbox". Rows naming an inbox that isn't connected will be flagged and skipped.

    Drag & drop an Excel/CSV file here, or

    4 · Output

    One draft per contact row is created in the Drafts folder of the inbox each row is routed to. Nothing is sent.

      Test a template

      Preview only — nothing is sent from this tab.

      Merge values

      Fields are generated from the {{MergeTag}} variables found in the template.

      Select a template to detect variables.

      Preview

      Fill in values to preview the merged email.

      Historical log

      TimeTypeCategoryMessage

      Live diagnostics

      Microsoft (Entra ID) configuration

      WizMerge-Omni talks to Microsoft 365 directly from your browser using your personal Microsoft account. One-time setup: create a free app registration with your personal account (plain steps in the SOP below), paste its Client ID here, and save. Tenant ID: common if your registration allows any organization plus personal accounts, or consumers if you chose personal accounts only. Picked the wrong one? The app spots the error at sign-in and switches automatically. The redirect URI is detected from the page address automatically; anything saved here overrides the built-in defaults in this browser.

      Google (Gmail) configuration

      Gmail needs a free Google Cloud project of your own — a one-time setup (plain steps below). Paste the OAuth Client ID here and save. The page address you're opening this from must be listed under "Authorized JavaScript origins" in that project (for localhost testing that's http://localhost:8000).

      Standard operating procedure

      1 · One-time setup

      1. Microsoft (personal account): a one-time setup so the app may sign you in — no IT department needed:
        1. Go to portal.azure.com and sign in with your personal Microsoft account (your outlook.com / hotmail.com address — not your work account).
        2. Use the search bar at the top to open App registrations, then click New registration.
        3. 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 to consumers in the app later — either choice works.)
        4. 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.)
        5. Click Register. On the overview page that opens, copy the Application (client) ID.
        6. On the left menu open API permissions → Add a permission → Microsoft Graph → Delegated permissions. Tick Mail.ReadWrite and Mail.Send, then click Add permissions.
        7. 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 to consumers. (If you get it wrong, the app detects the error at sign-in and switches by itself.)
        Personal accounts approve the app themselves the first time they sign in — nobody else has to approve anything.
      2. 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:8000 for localhost testing). Paste the Client ID above and save.
      3. 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

      1. Upload your contact spreadsheet to extract {{HeaderName}} merge tags.
      2. Pick a Send from inbox — the default inbox for rows whose Inbox column is blank. (You can also leave it unset and route every row by its Inbox column.)
      3. Compose To / CC / BCC, subject, body and signature. Click any chip to insert its tag at the cursor.
      4. Save the template. Attachments added here apply to the current session only and go to every email in the merge.

      3 · Mail Merger

      1. Pick a saved template, then drop in the contact list file.
      2. Per-row inbox routing (optional): add an Inbox column to your contact list and write each row's inbox email address in it. Blank cells use the template's "Send from inbox".
      3. Press Check data to see the routing preview — which rows go through which inbox — before anything happens.
      4. 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

      1. Select a template, fill the detected variables, and preview the merged email exactly as it will go out.
      2. 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.

      Confirm