Setup Guide

Microsoft 365 Setup for Cold Email — Step-by-Step Guide

The 12-step Outlook bulk mailbox provisioning playbook for cold outreach in 2026 - DNS, DKIM2, Entra ID OAuth, and sequencer wiring.

StackMail Editorial
StackMail editorial team
Updated
18 min read

Why Microsoft 365 belongs in a cold-outreach stack

Most sequencer marketplaces default to Google Workspace because it is faster to spin up. That convenience is also a deliverability liability: when every cold email vendor provisions every customer on Google, recipient spam filters develop a correlation between "new Google Workspace mailbox" and "cold outbound." Microsoft 365 sits behind a different IP space (the Outlook Protection network), a different reputation model (Microsoft Defender vs Postmaster), and a different filter stack at the receiving end.

That diversification matters. If you push 100% of volume through Google and Google throttles your sender, your campaigns stop. If you split 60/40 between Google and Microsoft 365 and one provider degrades, you keep half your pipeline running while you rotate. The infrastructure rule for cold outbound at scale is simple: never concentrate more than 70% of volume on any single mailbox provider.

Microsoft 365 is also the right answer when your buyers themselves use Outlook — and a large share of enterprise B2B does. Mailbox-to-mailbox traffic between two Outlook tenants is filtered more leniently than cross-provider traffic, because Microsoft trusts its own DKIM signatures and SPF includes more aggressively than it trusts Google's. If you sell to enterprise IT, finance, or healthcare, Microsoft 365 is not optional — it is the primary channel.

The trade-off is operational: Microsoft 365 setup is materially more complex than Google Workspace. DKIM is now DKIM2 with two selectors that must be enabled manually in Defender. App passwords are deprecated, so OAuth via Entra ID is mandatory on new tenants. Throttling rules are stricter and quieter — Microsoft rarely sends a clear bounce when it caps you. The remainder of this guide covers every gotcha that costs teams weeks of debugging.

The 12-step Outlook bulk mailbox provisioning checklist

Each step below is required. Skipping DKIM2, OAuth registration, or display-name configuration is the most common reason new Microsoft 365 cold outreach setups land in spam during week one.

  1. Step 1 — Register a dedicated cold-outreach domain

    Never run cold email from your primary brand domain. A single deliverability incident — one spam complaint cluster, one Spamhaus listing — can poison the domain reputation that your transactional mail and customer support inbox depend on. Buy a close variant: yourbrand.io, yourbrand.co, get-yourbrand.com, try-yourbrand.com. Budget $9-15/year per domain. See the DNS setup guide for registrar-by-registrar walkthroughs.

  2. Step 2 — Choose Business Basic over Business Standard

    Microsoft 365 Business Basic at $6/user/month is the correct plan for cold outbound. It includes Exchange Online, Outlook on the web, OAuth-capable SMTP AUTH, and Microsoft Defender DKIM controls. Business Standard at $12.50/user/month adds desktop Word, Excel, PowerPoint, and Teams — none of which a sending mailbox opens. At 100 mailboxes the difference is $650/month or $7,800/year.

    Microsoft 365 Business Basic vs Business Standard for cold email
    FeatureBusiness BasicBusiness Standard
    Price per user / month$6.00$12.50
    Exchange Online mailboxYes (50 GB)Yes (50 GB)
    OAuth SMTP AUTHYesYes
    Defender DKIM2YesYes
    Desktop Office appsNo (not needed)Yes (unused)
  3. Step 3 — Create the tenant and verify the domain

    Sign up at microsoft.com/microsoft-365/business and create the tenant. Pick the geo carefully: choose European Union for GDPR-bound EU teams, United Kingdom for London residency, or United States for everyone else. Tenant geo is permanent — you cannot relocate later. Add the domain in Admin Center > Settings > Domains, copy the TXT verification record, paste it at the registrar, and wait 15-30 minutes for verification. The tenant gets an irreversible yourtenant.onmicrosoft.com identifier — pick it carefully.

  4. Step 4 — Publish the Outlook MX record

    Add a single MX record at priority 0:

    Type: MX
    Host: @
    Priority: 0
    Value: yourdomain-com.mail.protection.outlook.com

    Replace the dot in your domain with a hyphen — this is a Microsoft naming convention, not a DNS quirk. Wait for propagation before adding users; otherwise inbound to the new mailboxes will bounce.

  5. Step 5 — Publish SPF

    Type: TXT
    Host: @
    Value: v=spf1 include:spf.protection.outlook.com -all

    Use -all (hard fail) once you have confirmed no third-party sender needs to send as the domain. Soft-fail (~all) is acceptable during the first week while you audit, but tighten to hard-fail before scaling. Validate with the StackMail SPF checker — broken SPF is the single most common reason cold mail lands in Junk.

  6. Step 6 — Enable DKIM2 in Microsoft Defender

    Microsoft has migrated all new tenants to DKIM2, which uses two rotating selectors (selector1 and selector2) for key rotation without downtime. Both selectors are CNAMEs at your domain pointing to the tenant's onmicrosoft.com hostname:

    selector1._domainkey.yourdomain.com CNAME
      selector1-yourdomain-com._domainkey.yourtenant.onmicrosoft.com
    
    selector2._domainkey.yourdomain.com CNAME
      selector2-yourdomain-com._domainkey.yourtenant.onmicrosoft.com

    Then go to security.microsoft.com > Email & Collaboration > Policies & Rules > Threat Policies > DKIM, select the domain, and toggle Sign messages for this domain with DKIM signatures to On. Microsoft rotates the active selector every six months — never delete either CNAME. Validate with the DKIM checker.

    Gotcha: The DKIM toggle is greyed out until both CNAMEs resolve. If the toggle stays grey after 30 minutes, DNS is the problem — re-check that the CNAME values exactly match the strings shown in Defender, including the hyphen substitution.
  7. Step 7 — Publish DMARC at p=none

    Type: TXT
    Host: _dmarc
    Value: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com; pct=100

    Start at p=none and run aggregate reports for two weeks before tightening to p=quarantine. Going straight to p=reject without monitoring will silently drop legitimate mail you forgot about (calendar invites from old vendors, transactional from your CRM). Validate with the DMARC checker.

  8. Step 8 — Create users in the Admin Center

    Admin Center > Users > Active Users > Add a User. Create 2-3 mailboxes per domain in firstname.lastname@domain.com format. Real-sounding first and last names; avoid roles like "sales@" or "outreach@" — Defender flags role addresses on new domains as suspicious. Assign Business Basic at creation. Set the timezone to match the persona's real geography. Do not enable MFA on the cold-outreach mailboxes themselves — MFA breaks long-lived OAuth refresh tokens, which is the wrong trade for a sending-only account.

  9. Step 9 — Register the Entra ID OAuth application

    This is the step Google Workspace doesn't require, and it is where most Microsoft 365 cold outreach setup attempts stall. App passwords are deprecated on new tenants — Modern Auth (OAuth 2.0) is mandatory. Microsoft Entra ID is the new name for Azure AD; the portal at entra.microsoft.com is identical to the old portal.azure.com flow.

    1. Go to entra.microsoft.com > App Registrations > New Registration.
    2. Name it after your sequencer (e.g. "Smartlead Connector"). Choose Accounts in this organizational directory only.
    3. Under API Permissions, add delegated Microsoft Graph permissions: SMTP.Send, IMAP.AccessAsUser.All, and offline_access.
    4. Click Grant Admin Consent for the tenant.
    5. Under Certificates & Secrets, generate a client secret. Copy the Value, not the Secret ID — they are different.
    6. Copy the Application (client) ID and Directory (tenant) ID from the Overview page. You will paste all three into the sequencer.

    Client secrets expire in 6, 12, or 24 months — set a calendar reminder for 30 days before expiry, because rotation requires re-consenting every connected mailbox.

  10. Step 10 — Set sender display names and signatures

    For each mailbox, set the display name to a realistic First Last, upload a professional photo, and add a one-line signature with role and company. Mail from new tenants with default display names (the local part of the email) gets routed to Junk by Outlook's recipient filter at noticeably higher rates than mail with proper display names. The cost is two minutes per mailbox; the upside is a measurable inbox-placement lift in week one.

  11. Step 11 — Configure throttling-aware send caps

    Microsoft 365 throttling is fundamentally different from Gmail's. Where Gmail bounces with a clear 4xx code when you exceed limits, Microsoft silently routes to Junk and quietly increments a tenant-level reputation counter. By the time you notice, the damage is done. The caps to respect:

    Microsoft 365 throttling limits and recommended cold email caps
    LimitMicrosoft hard capRecommended for cold
    Recipients per 24h per mailbox10,00030-40 (week 1-2)
    Messages per minute (SMTP)30Throttle to 6-10
    Recipients per single message5001 (always 1-to-1)

    Configure these caps in your sequencer, not on the Microsoft side — Microsoft does not expose per-mailbox volume controls in the Admin Center. Increase volume week-over-week only after monitoring reply rates and complaint rates stay healthy.

  12. Step 12 — Connect to the sequencer via OAuth

    In your sequencer's Microsoft 365 connector, paste the Application (client) ID, Directory (tenant) ID, and client secret value from Step 9. Confirm the sequencer is using the OAuth flow, not Basic Auth + app password — many older sequencers default to the deprecated path. After connecting, send a test message to a personal Gmail and a personal Outlook.com address; verify the headers show spf=pass, dkim=pass, and dmarc=pass. See the full list of supported sequencer integrations.

Microsoft 365-specific gotchas the Google guide doesn't cover

Azure AD is now Entra ID — same product, different URL

Microsoft renamed Azure Active Directory to Microsoft Entra ID in late 2023. Older sequencer documentation still says "register an Azure AD app" — this means the same flow, now at entra.microsoft.com instead of portal.azure.com. The portal redirects, but bookmarks and screenshots may be stale.

App passwords are retired on new tenants

Microsoft retired Basic Auth for SMTP AUTH on new tenants in 2024 and is in the final stages of disabling it on legacy tenants in 2026. If your sequencer asks for a 16-character app password, it is using the deprecated flow. Either upgrade to a sequencer that supports OAuth — every modern one does — or pick a different sequencer. Retrofitting OAuth onto an existing app-password setup means re-authenticating every mailbox manually.

Modern Auth requires consent grant flow on first connect

The first time a sequencer connects via OAuth, Microsoft shows a consent screen listing the requested scopes. Sequencers that hide this prompt or scrape it programmatically will fail on Conditional Access tenants. Connect each mailbox interactively the first time, then OAuth refresh tokens handle the rest.

Throttling rules differ from Gmail

Where Gmail bounces with a clear 4xx code on rate-limit hits, Microsoft silently routes to Junk and increments tenant-level reputation. There is no "throttled" signal in the SMTP response. The first symptom is reply rate dropping by 40% over 48 hours. Always cap volume at the sequencer level — relying on Microsoft to push back is a losing strategy.

Conditional Access policies can break OAuth silently

If your tenant has Conditional Access enabled (common on Business Premium and E3+), policies that require MFA on every sign-in or block legacy authentication will block OAuth refresh tokens too. Either exclude the OAuth app from Conditional Access, or run cold-outreach tenants on Business Basic where Conditional Access is not bundled.

Sequencer integration: SMTP and IMAP settings

Microsoft 365 IMAP and SMTP server settings for sequencer integration via OAuth
SettingValue
IMAP serveroutlook.office365.com
IMAP port993 (SSL/TLS)
SMTP serversmtp.office365.com
SMTP port587 (STARTTLS)
Auth methodXOAUTH2 (Modern Auth, OAuth 2.0)
Tenant IDFrom Entra ID app registration Overview
Client ID + secretFrom Entra ID app Certificates & Secrets

Frequently asked questions

Business Basic vs Business Standard for cold email — which one?

Business Basic ($6/user/month) is the correct plan. It includes Exchange Online, web Outlook, OAuth-capable SMTP AUTH, and Microsoft Defender DKIM controls — everything a sequencer needs. Business Standard ($12.50/user/month) adds desktop Office apps that a cold-outreach mailbox never opens. Spending the extra $6.50 per mailbox per month buys nothing for outbound.

What OAuth scopes does a sequencer need on Microsoft 365?

Three delegated scopes: SMTP.Send (send mail as the user), IMAP.AccessAsUser.All (read inbox for replies and bounces), and offline_access (refresh tokens so the user does not re-authenticate every hour). Mail.Read and Mail.ReadWrite are not strictly required for most sequencers and should be avoided to keep the consent prompt minimal.

Can I still use app passwords with Microsoft 365 in 2026?

No on new tenants. Microsoft retired Basic Auth for SMTP AUTH on new tenants in 2024 and is finishing rollout to all remaining tenants through 2026. App passwords still work for legacy tenants where Basic Auth was previously enabled, but every new cold-outreach tenant must use Modern Auth (OAuth 2.0). Plan for OAuth from day one — retrofitting later means re-authenticating every mailbox.

What is the difference between Outlook, Outlook.com, and Microsoft 365?

Outlook is the desktop and web mail client. Outlook.com is the free consumer mail service (like Gmail.com). Microsoft 365 is the paid business suite with custom-domain mailboxes hosted on Exchange Online. Only Microsoft 365 with custom-domain mailboxes is appropriate for cold outreach — Outlook.com addresses are blocked by most B2B spam filters as personal accounts.

What are the daily sending caps on Microsoft 365 for cold email?

The hard ceiling is 10,000 external recipients per 24 hours per mailbox and 30 messages per minute over SMTP AUTH. The practical ceiling is much lower: 30-40 cold messages per mailbox per day in week one, ramping to 50-70 by week four. Anti-spam policy in Defender will throttle or quarantine mailboxes that exceed reputation thresholds long before the 10,000 hard cap.

How do I respond when Microsoft 365 throttles a mailbox?

Stop sending immediately for 24-48 hours. Microsoft throttling fires when the outbound spam policy detects high recipient count plus low engagement. Reduce daily volume by 50% on resume, increase warmup volume on the same mailbox for 7 days, and audit content for spam triggers (link density, attachments, suspicious unsubscribe links). Do not provision a replacement mailbox on the same tenant until the throttle clears — Microsoft tracks tenant-level reputation.

Does Microsoft 365 honour GDPR and EU data residency for cold-outreach mailboxes?

Yes, but only when the tenant is provisioned in the EU geo. At signup, choose European Union as the tenant location — mailbox storage, DKIM signing, and Defender filtering then run in EU data centres (Dublin, Amsterdam, Frankfurt). Tenants provisioned in the US cannot be relocated later. For UK-based teams, choose United Kingdom for London/Cardiff residency.

Can I host multiple cold-outreach domains under one Microsoft 365 tenant?

Yes — a single tenant supports up to 900 verified domains, and each user can have up to 400 SMTP aliases. For cold email, host 5-10 domains per tenant: enough scale to be cost-efficient (one Global Admin license amortises across all domains) without putting all eggs in one basket if Defender flags the tenant.

How do I rotate the primary SMTP address on a mailbox?

In Admin Center > Active Users > Manage Email Aliases, add the new address as an alias, set it as primary, then remove the old address. Note that Modern Auth tokens are bound to the user object ID, not the SMTP address — rotation does not invalidate OAuth refresh tokens. Plan a 24-hour overlap window for in-flight replies addressed to the old SMTP.

Can I downgrade a Microsoft 365 license from Standard to Basic mid-cycle?

Yes — in Admin Center > Billing > Licenses, switch the user's license to Business Basic. Microsoft pro-rates the difference and credits the next invoice. The mailbox is unaffected: Exchange Online data, OAuth tokens, and DKIM signatures all persist. The only thing removed is the Office desktop app entitlement, which a cold-outreach mailbox does not use.

Skip 12 steps. Get 100 Microsoft 365 mailboxes in 4 hours.

StackMail provisions Microsoft 365 tenants, publishes MX/SPF/DKIM2/DMARC at the registrar, registers the Entra ID OAuth app, creates users, and connects to your sequencer - automatically. $2.50 per mailbox on annual billing, no setup fees.

No credit card to start10-minute setupYou own the mailboxes