How to Send an Email to Multiple Recipients From a SharePoint List With Power Automate

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:

SharePoint Project Updates list with Project Name, Update Details and Recipients columns

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

When an item is created or modified trigger for the Project Updates list

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

Send an email V2 action with the Recipients column in To and the project update in the body

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

Project Updates item with two email addresses separated by a semicolon

Both people receive the same email:

The same project update email received in two mailboxes

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:

SharePoint Event Management list with Event Name, Event Date and Attendees columns

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

When an item is created trigger for the Event Management list

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

Initialize variable action creating an empty array named varRecipients

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.

Append to array variable inside a For each loop adding each attendee's email

After the loop, add a Compose action that joins the addresses with semicolons:

join(variables('varRecipients'), ';')
Compose action joining the varRecipients array with semicolons

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:

Send an email V2 action with the joined attendee addresses 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':

Get items action reading the Department list

Initialize an array variable, RecipientsArray:

Initialize variable action creating the RecipientsArray array

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

Append to array variable inside two nested For each loops collecting manager emails

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')), ';')
Compose action joining the RecipientsArray variable with semicolons

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

Send an email V2 action with the department managers in To and the event details in the 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:

  1. Trigger: When an item is created or modified on Task Tracker.
  2. Condition: Status Value is equal to Completed. (A trigger condition works too, and saves runs.)
  3. In the True branch, Select with From = Assigned To and Map = item()?['Email'].
  4. 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 with formatDateTime(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:

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.

1 thought on “How to Send an Email to Multiple Recipients From a SharePoint List With Power Automate”

Comments are closed.