Show or copy the email from a SharePoint Person column
Short answer: a Person column holds the person's email along with the name, but the list view shows only the name. To show the email, format the column with JSON and read @currentField.email. To store it for filters or export, use a flow that writes the email into a plain text column.
Exact names may differ on your screen.
Why the email seems to be missing
You add a Person column to a list and pick a coworker. The list shows a name. There is no email to see, and no obvious way to add one. People then ask how to pull the email out of the people picker.
A Microsoft Community Hub thread on this exact question gets a reply with two routes. For display, apply JSON column formatting to the Person column. For storage, build a flow that reads the selected person and writes the email into a separate column. The Microsoft Learn pages below support both routes.
Display or store? Pick one first
Ask what the email is for.
- You only want to see it in the list, or click it to start a message. Use column formatting. Nothing is stored.
- You want to filter by it, sort by it, export it, or use it in another tool. Copy it into a text column with a flow.
Our advice, not a Microsoft rule: treat work emails as private and show them only to people who need them. See "Keep one column private (like pay or notes) in a shared list" before you copy emails into a column that the whole site can read.
What a Person column stores
The Microsoft Learn page on column formatting says "Person fields are represented in the system as objects" and that a person's display name is contained within the object's title property. The formatting syntax reference on Microsoft Learn lists the parts of a Person field: id, title, email, sip, picture, department and jobTitle. The email is one of them.
One more detail from that page. If someone changes the "Show field" setting of the Person column, the title part may show something other than the name, for example a department. If your column shows odd text, check that setting.
Set up the list
Use the same list for both methods. Here is a small example called Equipment requests.
- Title: a short summary of the request.
- Requested for: a Person column. This is the one that hides the email.
- Requester email: a Single line of text column. Only needed for method 2.
Method 1. Show the email with column formatting
Column formatting changes how a column looks. It does not change the data in the item. Microsoft says anyone who can create and manage views in a list can use it, and that everyone who views the list then sees the result. Because work emails are private, check who can open the list before you use this.
- Open the list in your browser.
- Open the menu under the "Requested for" column name.
- Under Column settings, choose Format this column.
- Find the box where you enter the column formatting JSON. On screen you see a pane with a large text box and Preview, Save and Cancel buttons.
- Paste a format that reads the person's email. See below.
- Select Preview. Check the result.
- Select Save.
The Microsoft Learn column formatting page includes a sample meant for a Person field. It shows the name and adds a mail icon that opens a message to that person. The part that reads the email is:
"@currentField.email"
The same page has a multi-person example that shows each person's name with the email under it. The part that reads the email there is:
"[$person.email]"
Here is a small format built on Microsoft's own pattern. Microsoft's basic Person example uses "txtContent": "@currentField.title" to show the name. Swapping title for email shows the address instead:
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"txtContent": "@currentField.email"
}
Our advice, not a Microsoft rule: run Preview before you save, and start from the full samples on the Microsoft Learn page for anything bigger. Use Preview to check, and Cancel if it looks wrong.
Two notes from the Microsoft pages. First, the formatting works for a single Person column and, with a loop, for a column that allows more than one person. Second, to refer to another column in the same row, use its internal name. Other columns work only if they are in the same view.
Method 2. Copy the email into a text column with a flow
Use this when you need the email as stored text.
- Make sure the list has a Single line of text column named "Requester email".
- Open Power Automate and create an automated cloud flow.
- Choose the SharePoint trigger "When an item is created". Microsoft's SharePoint connector page lists it, and also lists "When an item is created or modified".
- Set the Site Address and List Name to your list.
- Add the SharePoint action "Update item". The connector page says it takes a site address, a list name, an item Id and the changed values.
- Set the Id to the Id from the trigger.
- Set Title to the Title from the trigger. Update item asks for it when Title is required.
- In the "Requester email" box, choose the email value of the "Requested for" person from the dynamic content list. Microsoft's SharePoint connector page lists an expanded user object with Claims, DisplayName, Email, Picture, Department and JobTitle, and describes Email as "user email". The label on your screen may differ. If you do not see an email entry, look at the person entries the trigger offers and test each one. As an expression, our advice, not a Microsoft rule: triggerOutputs()?['body/Requested_x0020_for/Email']. Confirm the path in your run history, because it depends on the internal name of your column.
- Save and test with a new item.
- Open the list. The "Requester email" column should now hold the email.
Our advice, not a Microsoft rule: start with "When an item is created" only. If you use "When an item is created or modified", your own Update item step edits the item and may start the flow again. Test this with one item and read the run history before you rely on it.
Fill in old rows
The trigger only handles new items. Rows that exist already stay empty. One way to start: build a second flow that you run by hand.
- Use the SharePoint action "Get items".
- Set Top Count to a number above your row count, up to 5,000. Microsoft's connector page lists Top Count as the setting for the total number of entries to retrieve.
- Open the action settings and turn on Pagination. Set the threshold above your row count. Get items returns 100 rows by default. Top Count goes up to 5,000, and Pagination with a threshold goes past that. For the full fix, see "Power Automate Get items stops at 100 rows: how to get them all".
- Add "Apply to each" over the results, with "Update item" inside, set up the same way as above. Fill Title from the current item the same way.
- Run it once. Check the count in the run history.
Check your work
- Add a new item and pick a person.
- For method 1, check that the email shows in the list view.
- For method 2, wait for the flow to finish, then reload the list.
- Try an item where the Person column is empty. Your format or flow should not show an error.
- Open the flow run history if something is wrong. It shows which step failed.
What to avoid
- Do not copy emails into a column the whole site can read if only a few people need them.
- Do not treat the copied email as live. It is a text copy. If the person's email changes, the copy does not change by itself.
- Do not type a person's email by hand. Typos send messages to the wrong place.
- Do not skip Preview. A bad format can make the column look empty or broken.
- Do not run the backfill flow on a big list without Top Count and Pagination set.
Honest limits
Column formatting shows the email only where it is applied. A copy in a text column does not follow the person if the account changes. Also, if the picker cannot find a person at all, see "SharePoint people picker cannot find a user or guest".
When to get help
You can build all of this yourself in Microsoft 365. If you would rather have it built and tested for your team, I do that. A tracker like this is a fixed price: $5,000 for one, built in 2 weeks. See "What a SharePoint tracker costs to build". Bring one example of the problem to a free call.
I am Al Davies. I run 250 High Street LLC and build SharePoint trackers and Power Automate flows for operations teams. I work remotely. The first call is free, and I will not try to sell you anything.
See trackers I built: Tools I built
FAQ
Does column formatting change the data in the list?
No. Microsoft Learn says "The column formatting doesn't change the data in the list item or file; it only changes how it's displayed to users who browse the list."
Can I show the email in a Person column without a flow?
Yes. Column formatting can read the email part of a Person field with @currentField.email. Microsoft's page shows it in a mailto link. Nothing is stored.
Which should I use, formatting or a flow?
Use formatting if you only need to see or click the email. Use a flow if you need the email as stored text to filter, sort, export or reuse. The two can be used together.
Why does my Person column show something other than a name?
The Show field setting on the Person column can change what the title part shows. Microsoft Learn notes that a Person column set to show Department will give the department there.
Will the copied email update if the person's email changes?
Not by itself. The text column holds a copy made when the flow ran. Re-run the flow if you need fresh values.
Can a calculated column show the email from a Person column?
No. A Microsoft Q&A moderator answer says Person and Group columns are among the types not supported in a calculated column formula. Use the flow in Method 2 to copy the email into a text column.
Sources
- Microsoft Community Hub, Extract email address from people picker (a discussion thread)
- Microsoft Learn, Use column formatting to customize SharePoint
- Microsoft Learn, Formatting syntax reference
- Microsoft Learn, SharePoint connector reference
- Microsoft Q&A, Calculated Columns on Sharepoint Lists