WizMerge — Standard Operating Procedure

Contents: 1. Sign in with Microsoft · 2. Upload the contact list · 3. Generate the template · 4. Preview before anything goes out · 5. Build & send the mail merge · 6. Check the audit log for errors · Pre-flight — before the big button · Appendix

You will do steps 2–5 inside the app's five tabs, in this order: Template Manager → Mail Merger → Email Tester → Mail Merger → Audit Logger. Build your source file before you open the app — in Excel (see Appendix H). Running example: every screen follows the same three members from contact_list.xlsx — Walker Steppens, Tanner Brown, John Doe — and the *WizMerge Sample Template*. The raw files live in sample-data/. One requirement: an internet connection — the app loads two libraries from a CDN, and a yellow "libraries failed to load" banner means check your connection and reload.

1. Sign in with Microsoft

1.1 Find the sign-in controls

Top-right of every screen. Click Sign in with Microsoft.

1.2 Sign in

A Microsoft popup opens. Choose your FDA account and approve Mail.ReadWrite and Mail.Send (first time only). The header then reads "Signed in as …". If sign-in fails, allow popups for the WizMerge site and retry — the reason is written to the Audit Logger (§6).

Everything runs in this browser: your sign-in goes directly to Microsoft, and templates and settings stay in this browser's local storage.

1.3 Entra configuration — usually already done

The FDA registration is pre-configured. You only need this if you see the yellow banner:

Click Open setup → the Instructions tab → fill Client ID, Tenant ID, Redirect URI → Save configuration → Test sign-in. These live in this browser's local storage only — use Export templates.json (§3.2) to move templates to another machine.

1.4 Sign out

Click Sign out in the header when you're done on a shared machine.

2. Upload the contact list

2.1 Drop the file

Open the Mail Merger tab. Drop contact_list.xlsx onto the dropzone, or browse for it.

2.2 Read the meta line

Check the filename, the row count (3 rows × 7 columns), and whether an attachment column was found — step 3 appears only when one is found. Confirm the preview shows the right sheet.

⚠ Loading a new contact list clears any attachment files you already selected in step 3 — always load the final contact list before selecting attachment files.

3. Generate the template

3.1 Upload a data file to mint the chips

Choose data file… → one clickable chip per column. Click into a template field first, then click the chip to insert its tag at the cursor.

⚠ Click into a template field first — To, CC, BCC, subject, body, or signature — then click the chip. Otherwise the app just toasts a reminder and nothing is inserted.

3.2 Saved templates

The Saved templates dropdown loads a template for editing. Export templates.json backs them up; Import restores them. Attachments are never included in the export.

3.3 Compose the email

Fill in the fields top to bottom: name (*WizMerge Sample Template*), To = {{Email}}, subject, body with tags, signature. Drop template-wide attachments in the dropzone.

To: {{Email}}
Subject: Subscription Update - Switch to Monthly Billing Cycle

Member #: {{MbrID}}

Greetings {{FirstName}} {{LastName}},

I hope this email finds you well. Please note that the quarterly billing cycle structure will be suspended effective Q1 2027. Moving forward you will be billed for goods and services monthly, in the amount of $ {{InvoiceTotal}}. Please find a detailed invoice for your 2027 subscription attached.

Your current Donation Club status is: {{DC_Status}}

Respectfully,
Elijah Gaines
Membership Coordinator
Florida Dental Association

⚠ Attachment files live in memory only until you reload the page, go on every email in the merge, and are not saved with the template.

3.4 Create New · Save / Update · Delete

Create New clears the form. Save / Update requires a name. Delete asks for confirmation and can't be undone.

4. Preview before anything goes out

4.1 Email Tester — hand-typed values

Pick the template. One field appears per {{tag}} — type Walker's values and watch the merged email render live. This tests the template's wording, not your spreadsheet.

4.2 Mail Merger — Preview emails (real data)

With template and contact list loaded, click Preview emails: the first 3 merged emails exactly as they'll go out — with our 3 members, the entire run.

5. Build & send the mail merge

5.1 Step 1 — choose the template

Read the summary line: subject, tags used ({{Email}}, {{MbrID}}, {{FirstName}}, {{LastName}}, {{InvoiceTotal}}, {{DC_Status}}), and any waiting session attachments.

5.2 Step 3 — per-recipient attachments

This panel appears only when an attachment column was detected. Select the invoice files:

RecipientNames in the Attachment columnYou select in step 3
Walker Steppensinvoice_steppens_2027_DEMO.txtAll three invoice files — matching ignores case
Tanner Browninvoice_brown_2027_DEMO.txt
John Doeinvoice_doe_2027_DEMO.txt

Generic Attachment (all recipients).txt is not named in the sheet — it goes in the Template Manager attachments dropzone instead (§3.3).

5.3 Step 4 — drafts or send

⚠ First run with a new template? Use the "Trial run" field to process just Walker's row first — enter 1, inspect the result, then run all three rows.

5.4 Check data

Click Check data. Green ("all rows look good") means go. Missing columns lists tags with no column — those print blank. Row warnings name bad addresses, duplicates, and missing files.

5.5 Press the big button

A confirmation dialog appears for sends, or whenever issues exist — Confirm & send proceeds, Cancel aborts.

5.6 While it runs

Watch the progress bar and per-row results (Row 1: draft created for bigsteppen@snuffy.net). Finished rows are auto-skipped on rerun — fix failures and press the button again; Reset saved progress clears that memory.

After the run, open your Outlook Drafts folder — one personalized draft per row, attachments included — review each, and send when ready.

6. Check the audit log for errors

6.1 Historical log

Set the type filter to Error after a run. Search by address or filename. Export CSV/JSON for records; Clear log wipes it (with confirmation).

6.2 Live diagnostics

The console streams every entry as it happens — watch each Graph call land during a merge.

6.3 Reading a merge's story

A clean drafts run: "Mail merge started: 3 rows…" → one "Draft created for …" per row → "finished: 3 drafts created, 0 failed." A send run says "Email sent to …" instead. The full error table is in the appendix (§D).

Pre-flight — before the big button

Appendix

A. Template Manager — field by field

B. Mail Merger — step by step

C. Email Tester

D. Audit Logger

Log saysIt meansWhat to do
Your sign-in expired. Click "Sign in with Microsoft" again, then retry.Microsoft token lapsed (HTTP 401)Sign in again, rerun — finished rows are skipped
Microsoft refused the request… missing a permission or admin consent (HTTP 403)Entra permissions problemCheck API permissions in Entra; contact IT
Microsoft could not find what was asked for (HTTP 404)Mailbox or Drafts folder unreachableCheck the mailbox; retry
Microsoft is throttling requests… (HTTP 429)Too many requests, too fastWait a minute, rerun — finished rows are skipped
Microsoft had a temporary problem (HTTP 5xx)Their side hiccupedWait a bit, retry
Attachment file(s) not selected: invoice_doe_2027_DEMO.txt. Add them in Mail Merger step 3.John's row named a file you never selectedSelect the files in step 3 and rerun
Row N skipped: row produced no To recipients / invalid address(es)Bad or missing email in that rowFix the spreadsheet cell, rerun
Network problem — check your connectionConnectivity droppedCheck connection, rerun

E. Instructions tab

F. Merge-tag resolution rules

G. Gotchas

H. Building your source file

H.1 Row 1 holds the column names

WizMerge reads the first worksheet only. Row 1 is the headers; every row below is one recipient. Empty rows are skipped; blank cells come out blank. Accepted: .xlsx, .xls, .csv.

MbrIDFirstNameLastNameEmailDC_StatusInvoiceTotalAttachment
123456789WalkerSteppensbigsteppen@snuffy.netGold400invoice_steppens_2027_DEMO.txt
654987321TannerBrowntbrown01@snuffy.netSilver345invoice_brown_2027_DEMO.txt
789654123JohnDoejohndoe@snuffy.netBronze335invoice_doe_2027_DEMO.txt

Walker Steppens (Member #123456789, Gold, $400) gets invoice_steppens_2027_DEMO.txt; Tanner Brown gets his own file; John Doe gets his. A blank cell would simply come out blank in the email — no error.

H.2 How merge tags work

{{ColumnName}} is replaced with that row's value in that column. Tags work in To, CC, BCC, subject, body, and signature. Matching ignores case and extra spaces inside the braces — but not typos.

You writeWalker receivesTanner receivesJohn receives
Dear {{FirstName}} {{LastName}},Dear Walker Steppens,Dear Tanner Brown,Dear John Doe,
Member #: {{MbrID}} · $ {{InvoiceTotal}}123456789 · $ 400654987321 · $ 345789654123 · $ 335
{{email}} (lowercase) in the To fieldbigsteppen@snuffy.net — case doesn't matter, typos do
{{InvoiceTotals}} (typo — no such column)blank for everyone — and no error is raised

⚠ A mistyped tag resolves to blank silently. Run Check data (§5.4) before every real send.

H.3 The Attachment column

Name the column Attachment, Attachments, File, or Files (any case). Each cell lists that row's file(s), separated by commas.

⚠ If a row names a file you never selected in step 3, that row fails — every other row still processes. Files over ~20 MB get flagged; Outlook may reject messages near 25 MB.

H.4 Source-file checklist

WizMerge SOP. Grounded in WizMerge v2.0.0. The raw sample files live in sample-data/.