A project office I worked with sent status updates from a SharePoint list, and their first flow sent the same update as twelve separate emails, one per person. Replies went to one person at a time, nobody could see who else was informed, and a few people got it twice. What they wanted was one email, to everyone, with everybody on the To line.
The trick is always the same: build a single string of addresses separated by semicolons and put it in the To field. In this tutorial, I’ll show you four ways to do that, depending on where the addresses come from.
Quick answer: Send an email (V2) accepts several addresses in To, CC or BCC, separated by semicolons, such as adelev@contoso.com;alexw@contoso.com. If the people are in a Person column that allows multiple selections, use a Select action to pick each Email, then join(body('Select'), ';'), and put the result in To. Keep Send an email outside any loop so it sends one message.
The rules for multiple recipients
- Separate addresses with semicolons, not commas.
- One email, not a loop. If Power Automate wraps Send an email in a For each, you’ll send one email per person. Build the address string first, then send once.
- Use BCC for large or external lists, so recipients don’t see each other’s addresses.
- Know the limits. Exchange Online allows up to 1,000 recipients per message, 10,000 recipients per day and 30 messages per minute per mailbox. One email to 50 people counts as a single call to the Outlook connector, which is limited to 300 calls a minute.
Method 1: Addresses typed in a text column
The simplest setup. This Project Updates list has a Project Name (Title), Update Details (multiple lines of text) and Recipients, a text column where people type addresses separated by semicolons:

Create an automated cloud flow with When an item is created or modified, and select the site and list:

Add Send an email (V2). Put the Recipients column in To, the project name in the subject, and the update in the body:

Save the flow, select Test > Manually, and add an item with two or more addresses:

Both people receive the same email:

Two things to know. A single line of text column holds only 255 characters, so use Multiple lines of text for longer lists. And created or modified sends the email again every time someone edits the item. If you only want it once, use When an item is created, or add a condition.
Method 2: Email everyone in a multi-person column
Most lists use a Person or Group column instead, so people pick names instead of typing addresses. This Event Management list has an Event Name, an Event Date and an Attendees column that allows multiple selections:

Create an automated flow with When an item is created for the list:

Add Initialize variable, named varRecipients, of type Array, with no value:

Add Append to array variable, choose varRecipients, and pick Attendees Email as the value. Because Attendees holds several people, Power Automate puts the action in a For each loop, which is what we want here: it collects one address per person.

After the loop, add a Compose action that joins the addresses with semicolons:
join(variables('varRecipients'), ';')

With two attendees, that returns adelev@contoso.com;alexw@contoso.com. Add Send an email (V2) after the loop, with the Compose output in To:

Everyone in the Attendees column gets one invitation email, and they can all see who else is invited.
A shorter way: Select and join
You can skip the variable and the loop. Add a Select action with From set to the Attendees column, switch Map to text mode, and enter item()?['Email']. Then use join(body('Select'), ';') in the email’s To field. It’s faster, especially for lists with many people.
Method 3: Email a group of people from another list
Sometimes the recipients live in a separate list, such as a Department list with each department’s managers. When a new event is added to an Event Details list, the flow emails all of them.
Create an automated flow with When an item is created on Event Details. Then add Get items for the Department list. Use a Filter Query if you only want certain departments, such as Title eq 'Finance':

Initialize an array variable, RecipientsArray:

Add Append to array variable with the managers’ Email. Because there are several departments, each with several managers, Power Automate adds two nested loops:

Someone who manages two departments would be added twice, so remove duplicates when you join. union() of an array with itself returns only unique values:
join(union(variables('RecipientsArray'), variables('RecipientsArray')), ';')

Put the Compose output in the email’s To field, and the event details from the trigger in the subject and body:

Get items returns 100 items by default. If the recipient list is longer, raise Top Count or turn on pagination in the action’s settings.
Method 4: Email the people assigned to a task when it’s completed
For a Task Tracker list with an Assigned To column (multiple people) and a Status choice column, you might want to tell everyone assigned when a task is marked Completed. Use an automated flow, not a manual one, so it runs at the right moment:
- Trigger: When an item is created or modified on Task Tracker.
- Condition: Status Value is equal to Completed. (A trigger condition works too, and saves runs.)
- In the True branch, Select with From = Assigned To and Map =
item()?['Email']. - Send an email (V2) with To =
join(body('Select'), ';'), and the task name and due date from the trigger. Format the date for US readers withformatDateTime(triggerBody()?['DueDate'], 'MMMM d, yyyy').
Because the flow reads the item from the trigger, triggerBody() has the task’s values. In a manual flow that loops over Get items, use items('For_each')?['Title'] instead; triggerBody() is empty there.
Troubleshooting
- Everyone gets a separate email. Send an email is inside a For each. Move it after the loop and use the joined string.
- An error about an invalid email address. Addresses are separated by commas or contain spaces. Use semicolons, and check for empty values with a Compose before sending.
- Some people are missing. Get items returned only 100 items, or the Filter Query used a display name instead of the column’s internal name.
- The email is sent again after every edit. The trigger is created or modified. Add a condition, or use When an item is created.
- You need a distribution list. Put the group’s address in To; Exchange delivers it to every member. For shared mailboxes, see the Send an email (V2) guide.
These Power Automate email tutorials may help next:
- How to Use Power Automate Send an Email (V2) Action?
- Power Automate Send Email Based on Form Response
- Send 7 or 14 Day Task Due Reminder Emails in Power Automate
- How to Send Monthly Email Reminder for a Due Date Using Power Automate?
- How to Send Email based on Date in SharePoint list using Power Automate?
- How to Send Email Using If Condition in Power Automate?
Frequently Asked Questions
How do I send an email to multiple people in Power Automate?
Put the addresses in To, CC or BCC, separated by semicolons. Microsoft shows joining email addresses with semicolons in its Join action example.
How do I email everyone in a SharePoint Person column?
Use Select to pick each person’s Email, join the results with semicolons, and put that in the To field of one Send an email action.
Why does Power Automate send a separate email to each person?
Send an email is inside a For each loop. Build the address string first and send once, after the loop.
How many recipients can one Power Automate email have?
Exchange Online allows up to 1,000 recipients per message across To, CC and BCC, and 10,000 recipients per day.
Should I use commas or semicolons between addresses?
Semicolons. The To, CC and BCC fields expect addresses separated by semicolons.

I have worked with Microsoft technologies for more than 18 years, including SharePoint, Microsoft 365 and the Power Platform (Power Apps, Power Automate and Power BI), at companies like HP, TCS and KPIT. I started EnjoySharePoint in 2011 to share the solutions I build in real projects with readers in the United States, Canada, the United Kingdom, Australia, New Zealand and beyond. Microsoft has recognized this work with the Microsoft MVP award 13 times since 2014.
Very helpful–thank you! You have an error in the code snippet shared and “Recipients” is misspelled.