Written by Jennifer Walsh. Reviewed for technical accuracy by Shubham Dixit, Independent Expert in Email Forensics and Data File Conversion.
Shubham is an independent external reviewer and not an employee of PCDOTS.
Quick answer. Email addresses in a PST sit in the From, To and Cc headers of every message, so unlike scraping phone numbers this is a clean, reliable read of a real field. To extract email addresses from a PST file without Outlook, the open-source readpst plus a short script lists them, or a tool reads the .pst directly into a deduped list.
On this page
Where the addresses live, and why that helps?
Good news to start with. Email addresses are not scattered through the text the way phone numbers are, they sit in fixed header fields, the From, To, Cc and Bcc of every single message. That means pulling them out is a clean, reliable read of a real field, not a fuzzy guess, so you end up with actual addresses rather than a pile of lookalikes to sort through. The only real work is getting inside the PST, which is a closed Outlook container, and then reading those headers across every message. Both routes below do exactly that.
Addresses come from real header fields, so what you extract is trustworthy.
“This is one of the tidier extraction jobs. Addresses live in structured headers, so unlike pulling phone numbers out of body text, what comes back is dependable, real addresses in, real addresses out. For a free route with no Outlook, I convert the PST to EML with readpst and then read the From, To and Cc lines with a few lines of Python. When someone wants the whole mailbox without touching a terminal, a tool that reads the .pst directly is the sensible call. And whichever you use, remember the output is people’s contact data, so pull it for a real reason and keep it safe.” Shubham Dixit, Email Forensics reviewer (draft, pending approval)
The free way, no Outlook needed
Since the searches keep asking for a way without Outlook, here it is, and it costs nothing. First turn the PST into readable messages with the open-source readpst, which does not need Outlook at all. Install it with brew install libpst on a Mac, apt install pst-utils on Linux, or run it on Windows through WSL, then convert.
readpst -e -r -o eml_folder your_file.pst
That writes each message as an .eml. Now a short Python script reads the From, To and Cc headers of those files and keeps a deduped list.
import os, email
from email.utils import getaddresses
addresses = set()
for root, dirs, files in os.walk('eml_folder'):
for name in files:
if not name.endswith('.eml'):
continue
with open(os.path.join(root, name), 'rb') as f:
msg = email.message_from_binary_file(f)
for value in msg.get_all('from', []) + msg.get_all('to', []) + msg.get_all('cc', []):
for display, addr in getaddresses([value]):
if '@' in addr:
addresses.add(addr.lower())
with open('addresses.txt', 'w') as out:
for a in sorted(addresses):
out.write(a + '\n')
Because it reads real header fields, the list comes out clean, real addresses, lowercased and deduped, no lookalikes to weed out. Nothing leaves your computer either.
readpst opens the PST, then a few lines of Python read the headers into a tidy list.
A tool, without the command line
If a terminal is not your thing, or the PST is large and you want one clean pass, a tool does the same read in a window. The PCDOTS PST Converter reads the .pst directly, without Outlook, lets you choose which fields to pull from, From, To, Cc and more, and writes a deduped address list you can save. It runs on Windows and has a free version that pulls the first ten so you can confirm it reads your file. Same reliable header read as the script, just with a preview and nothing to type.
The tool route, a PST read straight into a deduped list of addresses.
Here are the tool steps with the screens.
Step 1. Install and run the software on Windows, then open the menu.

Step 2. Choose PST files and add your .pst.

Step 3. Open Extract and choose Email addresses.

Step 4. Pick a destination and save the list.

For the conversion step on its own see convert PST to EML, and for the same job on a different store, extract email addresses from Thunderbird. To just look inside the PST first, our free PST viewer opens it without Outlook.
Using the list responsibly
One honest word before you put the list to use. A file of addresses pulled from a mailbox is personal data, so gather it for a reason you can stand behind, tidying your own contacts, a migration, keeping business records, or answering a discovery or compliance request. Writing to people who already correspond with you is reasonable. Turning a mailbox into a marketing or cold-email list of people who never opted in is not, and in many places it breaks the rules on unsolicited email. Extract for your own legitimate use, and store the file somewhere safe.
The methods compared
Pick by your comfort with a terminal and the size of the mailbox.
| Method | Best for | Good to know |
|---|---|---|
| readpst plus script | Free, happy in a terminal | Open source, no Outlook |
| PST Converter tool | A large PST, no terminal | Windows, pick the fields |
| Either way | A clean deduped list | Reliable, from real fields |
Frequently asked questions
Where are email addresses stored in a PST?
In the header fields of every message, the From, To, Cc and Bcc lines. That is why extracting them is a clean, reliable read rather than a guess.
Can I extract email addresses from a PST without Outlook?
Yes. The open-source readpst and a dedicated PST converter both read the .pst directly, so Outlook does not need to be installed.
Is there a free way to do it?
Yes. Convert the PST to EML with readpst, then run a short Python script that reads the From, To and Cc headers and dedupes them into a list.
Will the list have false entries like a phone scan?
No. Addresses come from real header fields, not free text, so you get actual addresses rather than lookalikes. Deduplication keeps it tidy.
Can I choose which fields to pull from?
With the tool, yes, you can select From, To, Cc and others. The script pulls From, To and Cc as written, and you can add or remove headers in the code.
Is it legal to extract addresses from emails?
For your own records, a migration or a legitimate investigation, yes. Using them to cold-email people who never opted in can breach privacy and anti-spam rules.
A clean list you can trust
The reassuring part of this one is that you are not guessing. Because the addresses come straight from the header fields, both routes hand you real, deduplicated addresses, no lookalikes to second-guess, no gaps from odd formatting. Pick the free readpst and script if a terminal suits you, or the tool if you would rather point and click through a large mailbox, and either way the result is the same tidy list. Gather it for a reason you can stand behind, keep it somewhere safe, and you are set.