This toolset generates personalized Outlook draft emails for PAFE in-room proctors using:
- A session contact CSV exported from the scheduling system
- A PowerShell consolidation script that groups sessions by person
- A mail merge script that fills an HTML email template and saves drafts in Outlook
The workflow prevents duplicate emails and ensures each volunteer receives one email listing all of their sessions.
Session Export CSV
│
▼
Convert-ProctorCSV.ps1
│
▼
Consolidated CSV (one row per volunteer)
│
▼
Create-OutlookDrafts.ps1
│
▼
Draft Emails in Outlook
- Windows
- PowerShell 5.1+ (installed by default)
- Microsoft Outlook Desktop installed and configured
- Outlook account with permission to send from:
[president@pafenorthwest.org](mailto:president@pafenorthwest.org)
The Outlook profile running the script must:
- Have the mailbox
president@pafenorthwest.orgadded OR - Have Send As / Send on Behalf permissions for that mailbox.
Export the proctor sessions to a CSV with one row per session assignment.
| Column | Description |
|---|---|
| Date | Full session date/time |
| Session | Description of the session |
| Person | Volunteer name |
| Email address | |
| Phone | Phone number (optional) |
Date,Session,Person,Email,Phone
04/07/2026 (Tue. 8:00AM - 12:00PM),Low Strings Concerto with Adjudicator2,Mike Person,name@gmail.com,4244242
04/07/2026 (Tue. 1:00PM - 5:00PM),High Strings with Adjudicator1,John Last,first.last@gmail.com,
04/08/2026 (Wed. 8:00AM - 12:00PM),High Strings with Adjudicator1,Roger,first_last@comcast.net,4244242Rows with blank Email will automatically be skipped.
Run the consolidation script.
.\Convert-ProctorCSV.ps1 `
-InputPath .\pafe_sessions_contacts.csv `
-OutputPath .\proctors-merged.csv `
-SessionListFormat Html
- Groups rows by email
- Combines sessions into a single column
- Produces one row per volunteer
| Column | Description |
|---|---|
| Email address | |
| Person | Volunteer name |
| Phone | Phone number |
| SessionList | List of sessions separated by <br> |
Email,Person,Phone,SessionList
a_person@gmail.com,A Person,4242424,"04/07/2026 (Tue. 1:00PM - 5:00PM) — Piano Concerto with Adjudicator3<br>04/08/2026 (Wed. 1:00PM - 5:00PM) — High Strings with Adjudicator2"
tchen@gmail.com,T Chen,4244242,"04/07/2026 (Tue. 8:00AM - 12:00PM) — High Strings Concerto with Adjudicator4<br>04/08/2026 (Wed. 1:00PM - 5:00PM) — Cello Concerto with Adjudicator1"Create an HTML template file.
Example:
VolunteerTemplate.html
The first line must contain the email subject.
Subject: PAFE Volunteer Confirmation – {{Person}}
All other content is HTML.
Subject: PAFE Volunteer Confirmation – {{Person}}
<p>Dear {{Person}},</p>
<p>
Thank you for volunteering as an <strong>in-room proctor</strong>
at the Performing Arts Festival of the Eastside (PAFE).
</p>
<p>
Please confirm that <strong>{{Phone}}</strong> is the best phone
number to reach you.
</p>
<p>
<strong>You are currently signed up for the following sessions:</strong><br>
{{SessionList}}
</p>
<p>
Warmest regards,<br>
First Last<br>
President, PAFE
</p>These must match CSV column names.
| Placeholder | Source |
|---|---|
{{Person}} |
CSV column |
{{Phone}} |
CSV column |
{{SessionList}} |
Consolidated session list |
{{Email}} |
CSV column |
Run the draft creation script.
.\Create-OutlookDrafts.ps1 `
-CsvPath .\proctors-merged.csv `
-TemplatePath .\VolunteerTemplate.html `
-FromAccount president@pafenorthwest.org
- Opens Outlook
- Reads the template
- Replaces placeholders
- Creates one draft email per volunteer
Emails are saved in:
Outlook → Drafts
Before generating drafts:
.\Create-OutlookDrafts.ps1 `
-CsvPath .\proctors-merged.csv `
-TemplatePath .\VolunteerTemplate.html `
-PreviewOnly
This prints rendered emails to the console without creating drafts.
-DraftCategory "PAFE Proctors"
Example:
.\Create-OutlookDrafts.ps1 `
-CsvPath .\proctors-merged.csv `
-TemplatePath .\VolunteerTemplate.html `
-DraftCategory "PAFE Proctors"
Run scripts from PowerShell, not double-click.
powershell
cd path\to\scripts
.\Convert-ProctorCSV.ps1
Allow scripts:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
The script prints:
Outlook account <account> was not found
Ensure the mailbox is added to Outlook.
Excel converted the number to scientific notation.
Fix by formatting the phone column as Text before exporting.
- Always run Preview Mode first
- Test with a small CSV (2–3 rows)
- Review drafts before sending
- Keep templates under version control
Convert-ProctorCSV.ps1
Create-OutlookDrafts.ps1
VolunteerTemplate.html
README.md
PAFE Technical Tools Performing Arts Festival of the Eastside