To import emails from another company into Microsoft 365, you must first create a dedicated admin account with the appropriate Exchange Online roles. This account serves as the secure bridge for data ingestion. The most reliable method involves uploading PST files to Azure Blob Storage and using PowerShell to run
New-MailboxImportRequest. This approach ensures high-volume transfers without throttling your local network or requiring direct access to the source mailboxes.
Prerequisites and Admin Account Creation
Before importing any data, you need an identity with sufficient permissions. Standard user accounts cannot execute mailbox import requests. You must assign the
Exchange Recipient Administrator or
Organization Management role to a specific service account. This is typically done via the Microsoft 365 Admin Center under Users > Active Users. Select the admin user, go to Roles, and add the necessary Exchange role.
Once the role is assigned, you must connect to Exchange Online. Open Windows PowerShell as an administrator and install the module if it is not already present. Run the following command to establish a secure session:
$UserCredential = Get-Credential
Connect-ExchangeOnline -UserPrincipalName $UserCredential.UserName
This step confirms that your admin account has the authority to manage mailbox imports. Without this connection, any attempt to run import commands will fail with permission errors. It is crucial to use a dedicated admin account rather than a global admin for routine operations to maintain security best practices. For more information on managing app passwords in different environments, see
Unable to Find 'App Passwords' Option in Microsoft 365 Email on GoDaddy.
Preparing PST Files and Azure Blob Storage
The source company must provide their email data in Personal Storage Table (PST) format. These files can be exported using Outlook desktop clients or third-party migration tools. Once you have the PST files, they must be uploaded to an Azure Blob Storage container. This is because the Exchange Online import service reads directly from Azure storage, not from local drives or generic cloud links.
Create a new storage account in the Azure Portal. Inside this account, create a blob container named something distinct like
pst-imports. Upload all PST files to this container. After uploading, you must generate a Shared Access Signature (SAS) token for each PST file. This token acts as a temporary password allowing the Exchange service to read the file.
To generate the SAS token, right-click the file in the Azure Portal and select "Generate SAS". Set the start time to now and the expiry time to at least 24 hours in the future. Copy the full URL which includes the query parameters for the SAS token. Do not share these URLs publicly, as they grant read access to the data.
Configuring Import Requests via PowerShell
With the admin connected and the PSTs in Azure, you can now initiate the import process. The core command is
New-MailboxImportRequest. However, this command does not accept remote hostnames or generic passwords for Blob Storage. It requires the specific
-SourceFilePath parameter pointing to the Azure URL.
For each user who needs data imported, run a separate request. Replace the placeholder values with your actual tenant details and the SAS URL generated earlier.
New-MailboxImportRequest `
-Mailbox "[email protected]" `
-SourceFilePath "https://yourstorageaccount.blob.core.windows.net/pst-imports/source.pst?sv=2020-08-04&sig=YOUR_SAS_TOKEN" `
-TargetRootFolder "Inbox"
The
-TargetRootFolder parameter specifies where the emails should land. Using "Inbox" places them in the main folder, but you can specify custom folders if needed. If the target folder does not exist, Exchange will create it automatically. Ensure that the
SourceFilePath is enclosed in quotes and contains the complete SAS URL including the question mark and parameters.
Monitoring and Troubleshooting Imports
After submitting the request, it enters a queue. Large PST files can take several hours or even days to process depending on size and network throughput. Monitor the progress by running:
Get-MailboxImportRequest | Get-MailboxImportRequestStatistics
Look for the
Status field. Common statuses include
InProgress,
Completed,
Failed, or
Queued. If the status is
Failed, check the
FailureDescription field for error codes. A common error is
403 Forbidden, which indicates the SAS token has expired or lacks read permissions. Another common issue is exceeding the maximum batch size; ensure your PST files are under 50GB each, though smaller files (under 2GB) are recommended for stability.
If you encounter issues with rule configurations during the import, note that custom rules do not always migrate perfectly. See
Configuring Customized Rule Mail Folder in Outlook for Microsoft 365 (MSO) Version 2402, Build 16.0.17328.20282, 64-bit for details on managing post-import folder structures.
Cleaning Up and Final Verification
Once all requests show a status of
Completed, verify the data in the target mailboxes. Log in to Outlook Web App (OWA) and check the Inbox for the migrated messages. If everything looks correct, remove the import requests to free up system resources.
Remove-MailboxImportRequest -Identity "RequestID"
You can find the Request ID in the statistics output from the previous step. Deleting completed requests prevents clutter in your admin view. Finally, revoke the SAS tokens in Azure Blob Storage after a few days to ensure no lingering access exists. This completes the secure transfer of emails from the external company into your Microsoft 365 environment.
Frequently Asked Questions
Can I import PST files directly from my local computer?
No, the Exchange Online import service cannot read files from local machines due to security and connectivity restrictions. You must upload the PSTs to Azure Blob Storage first. This ensures a stable, high-bandwidth connection between Microsoft's servers and the data source.
What happens if the SAS token expires during the import?
If the token expires while the request is
InProgress, the job will fail with a permission error. To resolve this, generate a new SAS token with a longer expiry date and update the
SourceFilePath in a new import request. You cannot simply extend an existing token; a new request is required.
How long does a typical PST import take?
Processing time varies based on file size and current server load. A 5GB PST might take 2-4 hours, while larger files can take significantly longer. There is no fixed speed limit, but Microsoft throttles concurrent imports per mailbox to protect system performance.
Do email rules and categories migrate with the PST?
PST imports generally move only message content, attachments, and basic metadata. Custom rules, categories, and flags may not transfer accurately. You may need to reconfigure rules manually after the import completes.
Is there a limit to how many PST files I can import at once?
There is no hard limit on the number of requests, but each mailbox can only have one active import request at a time. You can run multiple requests for different users simultaneously. However, excessive concurrent requests may impact overall tenant performance.