From a CSV to personal e-mails
- Step 1 · Open your development environment
- Step 2 · Put your CSV in a table
- Step 3 · Name the table and check the columns
- Step 4 · Import the rows
- Step 5 · Connect Microsoft 365
- Step 6 · Fill in your app registration
- Step 7 · Create a workflow that fetches the contacts
- Step 8 · Show the list as a chat widget
- Step 9 · Go through the contacts one by one
- Step 10 · Let an AI Colleague write the mail per contact
- Step 11 · Give the agent only what it needs
- Step 12 · Send the mail with Outlook
- Step 13 · Save and run
- Step 14 · See what was sent
You have a list of contacts in Excel or as a CSV, and everyone should get their own personal e-mail. In this path you put the list in a table, show it as a chat widget, let a workflow go through the rows one by one, have an AI Colleague write each mail and let Outlook send it. Along the way you connect Microsoft 365. You need: a CSV file and an app registration in Microsoft Entra ID (tenant ID, client ID and client secret).
Put your CSV in a table
Click + next to General and choose Table from a file. Drop your CSV in the window or click to pick it. Flow recognises the separator and the column names, and shows the first rows before anything is stored.
Fill in your app registration
As an app, Flow sends mail on behalf of a mailbox the app may use, without anyone having to be signed in. The client secret is stored encrypted and can never be read back. Choose Read and write: with read only, Flow refuses every step that sends something.
Create a workflow that fetches the contacts
A new workflow starts with a trigger. Add the Table step and choose your contacts table: it looks up every row and passes them on as rows.
Show the list as a chat widget
The Show widget step fills a chat widget with data from the workflow. Give the widget the rows from the table; in the chat, and at the bottom under Output, a neat table then appears instead of raw data.
Go through the contacts one by one
A Loop repeats the steps in its area for every item in a list. Choose the list rows and call the current item contact: inside the loop the steps then read {{contact.email}} and {{contact.name}}.
Let an AI Colleague write the mail per contact
Inside the loop choose Add step → AI agent, and create the writer right away with + New agent. Describe in the instructions what a good mail is, and what is never allowed. Flow tests the agent with sample data and publishes it; workflows always use a published version.
- In **Name ***, type
Mail writer - In What does the agent do?, type
Writes a short, personal e-mail to one contact. - In Method Rules (no AI model) Echo (test, no model) Anthropic Claude · not configur, choose Scripted AI (test street)
- In **Instructions ***, type
Write a friendly e-mail of at most 120 words to the contact, about the interest that is listed. Address the person by first name. Never mention prices and promise nothing. - In **Answer is called ***, type
mailtext

Send the mail with Outlook
Inside the loop add Outlook · Send email and choose your Microsoft 365 connection. To becomes the contact's e-mail address, the message is what the agent wrote: the answer in mailtext.answer (next to .outcome, the box's outcome). Leave Mailbox empty: Flow then sends from the default mailbox.
- In Outlook · Send email, choose Outlook · Send email
- In Connection Choose a connection… Outlook · sales@ + New connection, choose Outlook · sales@
- In To * One or more addresses, separated by commas., type
{{contact.email}} - In **Subject ***, type
Something for {{contact.company}}? - In **Message ***, type
{{mailtext.answer}}

This guide was carried out step by step on 22 Oct 2026 by an automated test on Flow (version 3e563176).





















































