Enterprise Email Solution — Non-PHI/PII Informative Notifications via Non-User ID (M365)
Document Version: 1.0 | Date: March 12, 2026 Classification: Internal — Non-PHI / Non-PII Only Scope: Alerting, Job Updates, and Operational Notifications
Table of Contents
- Executive Summary
- 1.1 Purpose
- 1.2 Scope
- 1.3 Goals, Objectives, Assumptions, Constraints and Risks
- 1.3.1 Goals
- 1.3.2 Requirements
- 1.3.3 Assumptions
- 1.3.4 Constraints
- 1.3.5 Risks
- 1.4 Related Documents
- Overall Design
- 2.1 Components
- 2.2 High-Level Design
- Solutions
- 3.1 Solution Overview
- 3.2 Solution Scope: PHI/PII vs. Informative
- 3.3 Implementation Options
- 3.4 Implementation Option Comparison
- Implementation
- 4.1 Team Responsibilities
- 4.2 Logic App Setup (Standard Plan, VNet)
- 4.3 Java Code Integration
- Warning — Security and External Sending Considerations
- Testing
- Appendices
- Appendix A — Acronyms
- Appendix B — Links
1. Executive Summary
1.1 Purpose
This document describes the enterprise solution for enabling automated, non-PHI/PII email notifications using Microsoft 365 (M365) via a Non-User ID account. It addresses the newly enforced throttling limits Microsoft has applied to .onmicrosoft.com (MOERA) domains and provides a compliant, scalable, and team-owned approach for sending internal operational alerts and job update notifications.
The solution has been validated and tested. This document serves as the reference architecture and implementation guide for all teams adopting this pattern.
1.2 Scope
In Scope:
- Automated email notifications containing non-PHI / non-PII data only
- Use cases include: job status alerts, pipeline failures, operational updates, scheduled report summaries
- Internal distribution lists (DLs) and verified internal
@optum.comrecipients only - M365 Non-User ID-based sending via Logic Apps (Standard Plan) or Java code
Out of Scope:
- PHI (Protected Health Information) and PII (Personally Identifiable Information) data in email body, subject, or attachments — this is explicitly not covered in this document
- State-specific data sending
- External recipient email sending (requires separate security architecture review — see Section 5)
- Client-facing email communications
Note: A separate architecture document will address PHI/PII email paths. That path requires distinct security controls, encryption, and compliance reviews and is intentionally excluded here to maintain clear separation of concerns.
1.3 Goals, Objectives, Assumptions, Constraints and Risks
1.3.1 Goals
- Provide a compliant, repeatable pattern for teams to send automated internal email notifications without using the
.onmicrosoft.comdomain in a manner that exceeds the new Microsoft enforced limits - Establish a Non-User ID-based identity as the sending principal so that email is not tied to any individual employee account
- Ensure all teams are self-sufficient in setting up and maintaining their own email-sending infrastructure
- Restrict all email sending to internal targets only (internal DLs and
@optum.com) - Keep the solution lightweight, cost-effective, and maintainable
1.3.2 Requirements
| ID | Requirement | Priority |
|---|---|---|
| R-01 | Email must be sent only to internal distribution lists or verified @optum.com addresses |
Must Have |
| R-02 | No PHI or PII data may be included in any email sent via this solution | Must Have |
| R-03 | The sending identity must be a Non-User ID (service/functional account) — not a personal employee account | Must Have |
| R-04 | Logic App must be deployed on the Standard Plan and placed inside a Virtual Network (VNet) | Must Have |
| R-05 | Each team must independently provision their own Non-User ID and Logic App or Java integration | Must Have |
| R-06 | All creation requests and support must go through the company portal | Must Have |
| R-07 | Java-based sending teams must implement their own SMTP/Graph API integration | Should Have |
| R-08 | External sending must not be enabled without explicit approval from the Security Architecture team | Must Have |
1.3.3 Assumptions
- Teams have access to the company portal to raise requests for Non-User ID creation
- Teams have Azure subscriptions with permissions to deploy Logic Apps on the Standard Plan
- The Non-User ID will be provisioned under the organization's custom domain (not
.onmicrosoft.com) - All recipients are internal — either
@optum.comaddresses or internal distribution lists - Teams are responsible for the content they send; governance controls (e.g., DLP policies) are assumed to be in place at the organization level
- The Office 365 connector in Logic Apps has sufficient permissions granted to the Non-User ID
1.3.4 Constraints
- PHI and PII sending is not part of this solution — any team attempting to send PHI/PII via this path is violating the constraints of this architecture
- State-specific data sending is not covered — regulatory constraints vary by state and are out of scope
- External sending is restricted — emails must not be routed to external domains without explicit security architecture review and approval
- This solution applies to informative / operational notifications only
- Only Logic Apps on the Standard Plan are within scope for the VNet integration requirement; Consumption Plan Logic Apps must not be used for this pattern
- Each team is limited to their own Non-User ID and may not share accounts across teams
1.3.5 Risks
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Team accidentally includes PHI/PII in email body or subject | Medium | High | Enforce DLP policies at the M365 level; teams must review content classification before sending |
| Non-User ID credentials are mismanaged or shared | Low | High | Follow company portal provisioning process; rotate secrets regularly via Key Vault |
| Logic App is deployed on Consumption Plan outside VNet | Medium | Medium | Architecture review gate; enforce Standard Plan in deployment pipelines |
| External emails are sent without security review | Low | High | Disable external routing by default on the Non-User ID mailbox; require explicit connector configuration for any external routing |
| Microsoft enforces further restrictions on licensed accounts | Low | Medium | Monitor Microsoft 365 Message Center; maintain this document with updated limits |
1.4 Related Documents
| Document | Description |
|---|---|
| Microsoft Tech Community — Limiting Onmicrosoft Domain Usage | Source blog describing the new MOERA throttling limits — see Appendix B |
| Company Portal — How to Create a Non-User ID | Step-by-step guide for provisioning the functional account — see Appendix B |
2. Overall Design
2.1 Components
| Component | Description | Owner |
|---|---|---|
| Non-User ID (Functional Account) | A licensed M365 service/functional account (not tied to any individual) used as the sending identity. Created via the company portal. | Each Team |
| Non-User ID Company Mailbox | Company mailbox associated with the Non-User ID, provisioned via the company portal. Configured to send to internal targets only. | Each Team (via Company Portal) |
| Logic App (Standard Plan) | Azure Logic App deployed inside a VNet using the Office 365 connector to trigger and send emails. Recommended approach. | Each Team |
| Java Code (Optional) | Team-owned Java application that calls M365 Graph API or SMTP relay using the Non-User ID credentials. | Each Team |
| Azure Virtual Network (VNet) | Network boundary within which the Logic App resides. Ensures network-level isolation and compliance. | Each Team / Platform Team |
| Azure Key Vault | Secure storage for Non-User ID credentials and secrets used by Logic Apps or Java code. | Each Team |
| Company Portal | Internal portal for raising Non-User ID creation requests and support tickets. | Organization / IT |
| Internal Distribution Lists (DLs) | Target recipients of the automated notifications. Must be internal @optum.com DLs only. |
Each Team |
2.2 High-Level Design
┌─────────────────────────────────────────────────────────────────────────┐
│ Team-Owned Azure VNet │
│ │
│ ┌────────────────────────┐ │
│ │ Trigger Source │ │
│ │ (Pipeline / Job / │──────────────────┐ │
│ │ Scheduler / Event) │ │ │
│ └────────────────────────┘ ▼ │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ Team Implementation Choice │ │
│ └──────────────┬──────────────────────────┘ │
│ ┌────────┘ └────────┐ │
│ ▼ ▼ │
│ ┌─────────────────────────────┐ ┌─────────────────────────────────┐ │
│ │ Option 1: Logic App │ │ Option 2: Java Code │ │
│ │ (Standard Plan, VNet) │ │ (Team-owned service) │ │
│ │ Office 365 Connector │ │ MS Graph API / SMTP │ │
│ └──────────────┬──────────────┘ └──────────────┬──────────────────┘ │
│ │ │ │
│ └─────────────┬──────────────────┘ │
│ │ Authenticate as Non-User ID │
│ ┌────────────────────────┐ │ │
│ │ Azure Key Vault │◀──┘ │
│ │ (Secrets / Creds) │ | │
│ └────────────────────────┘ | │
│ │ │
│ ▼ │
│ Non-User ID Company Mailbox │
│ (Non-PHI / Non-PII only) │
└──────────────────────────────────┬──────────────────────────────────────┘
│
Internal Only │ (internal DL or @optum.com)
▼
┌─────────────────────────┐
│ Internal Recipients │
│ - @optum.com mailboxes │
│ - Internal DLs only │
└─────────────────────────┘
Flow Description:
- A trigger event (pipeline failure, scheduled job, operational alert) fires
- The team's chosen implementation (Logic App on Standard Plan, or Java code) is invoked
- Credentials for the Non-User ID are retrieved from Azure Key Vault
- The implementation authenticates as the Non-User ID and sends email via the Office 365 connector (Logic App) or Microsoft Graph API / SMTP (Java)
- Email is sent from the Non-User ID Company Mailbox to the internal distribution list or
@optum.comrecipient - All content is non-PHI / non-PII informational data only
3. Solutions
3.1 Solution Overview
The core of the solution is the use of a Non-User ID (functional account) provisioned through the company portal. Once the Non-User ID is created and an M365 mailbox is associated with it, the account is used exclusively as a sending identity for automated, informative notifications.
Why this approach:
- Avoids the
.onmicrosoft.comMOERA domain throttling limit (100 external recipients per 24-hour rolling window — see Appendix B) - Decouples the sending identity from any individual employee — no dependency on personal accounts
- Enables audit tracking at the functional account level
- Works within existing M365 licensing without additional cost per team
- Keeps each team in full control of their own sending pipeline
3.2 Solution Scope: PHI/PII vs. Informative
The organization's email strategy is deliberately split into two paths:
| Path | Description | Covered in This Document |
|---|---|---|
| Informative / Operational | Non-PHI, non-PII alerts, job notifications, pipeline statuses, operational updates sent to internal recipients | Yes — this document |
| PHI / PII | Communications containing protected health information or personally identifiable information | No — separate document and architecture required |
This document exclusively covers the Informative path. The PHI/PII path requires distinct encryption, compliance controls, and will be addressed in a separate architecture document.
3.3 Implementation Options
The solution is the company-provided Non-User ID (functional account) with an M365 mailbox, provisioned through the company portal. This is the authoritative sending identity for all automated informative notifications. See Appendix B — Company Portal: How To Create a Non-User ID for the official reference.
How a team integrates with that sending identity is an implementation choice left to each team. Two options are available:
3.3.1 Option 1: Logic App with Office 365 Connector
Teams can use an Azure Logic App (Standard Plan, inside a VNet) with the built-in Office 365 Outlook connector to send email via the Non-User ID. This is a no-code / low-code option suitable for most teams. Refer to Section 4.2 for setup steps.
3.3.2 Option 2: Java Code Integration
Teams with existing Java services can send email programmatically using the Microsoft Graph API or SMTP relay, authenticating as the Non-User ID. This option requires the team to own and maintain the integration. Refer to Section 4.3 for guidance.
The choice between Option 1 and Option 2 is entirely up to each team based on their existing stack and preferences. Both options use the same company-provided Non-User ID solution as the sending identity.
3.4 Implementation Option Comparison
| Criteria | Option 1: Logic App (Office 365 Connector) | Option 2: Java Code |
|---|---|---|
| Setup Complexity | Low — no-code/low-code | Medium — requires Java development |
| VNet Integration | Native (Standard Plan required) | Depends on team's network setup |
| Attachment Support | Yes — PDF, TXT, and others supported | Yes — fully flexible |
| Credential Management | Key Vault + Logic App managed identity | Key Vault or env-based secrets |
| Cost | Standard Plan (~$40+/month) | No additional Azure cost (code only) |
| Maintenance | Low | Medium |
| Retry / Error Handling | Built-in | Must implement in code |
| Recommended For | Most teams — quick adoption | Teams with existing Java services |
| PHI/PII Risk | Must be controlled by team | Must be controlled in code |
| External Sending | Must be disabled — restricted (see Section 5) | Must be restricted in code |
4. Implementation
4.1 Team Responsibilities
Each team is independently responsible for their own provisioning, deployment, and ongoing management. There is no shared service or centralized instance for this solution. This is intentional — each team's use case, recipients, triggers, and content are specific to their workload.
| Responsibility | Owner |
|---|---|
| Raise Non-User ID creation request via company portal | Individual Team |
| Configure the Non-User ID mailbox for internal sending only | Individual Team (with IT via Company Portal) |
| Deploy Logic App (Standard Plan) or implement Java code | Individual Team |
| Place Logic App inside VNet | Individual Team |
| Store credentials in Key Vault | Individual Team |
| Configure Office 365 connector (Logic App teams) | Individual Team |
| Test email flow (see Section 6) | Individual Team |
| Raise support requests via company portal | Individual Team |
Important: For every step in this process, teams must use the company portal for creation requests and any support. Direct requests to IT via chat or email for Non-User ID provisioning will not be prioritized. All steps are documented in the company portal. See Appendix B for the Non-User ID creation guide.
4.2 Logic App Setup (Standard Plan, VNet)
- Create Azure Logic App (Standard Plan)
- Navigate to Azure Portal > Logic Apps > + Create
- Select Standard as the plan type (not Consumption)
- Choose the appropriate subscription, resource group, and region
- Enable VNet Integration — select the team's existing VNet and subnet
-
Click Review + Create
-
Configure Key Vault Access
- Assign a system-assigned Managed Identity to the Logic App
- Grant the Logic App's managed identity
Key Vault Secrets Userrole on the team's Key Vault -
Store the Non-User ID credentials (client ID, secret, or password) in Key Vault
-
Add the Office 365 Outlook Connector
- In the Logic App designer, add a new action: Office 365 Outlook — Send an email (V2)
- Authenticate the connector using the Non-User ID credentials
-
Set the From field to the Non-User ID's email address
-
Configure the Email Action
- To: Internal distribution list or
@optum.comaddress only - Subject: Descriptive, non-sensitive subject line
- Body: Operational / informative content only — no PHI/PII
- Attachments (optional): PDF, TXT, or other non-sensitive files as needed
Note: The parameters above define the mandatory baseline. All other email action parameters — such as CC, BCC, importance level, reply-to address, sensitivity label, HTML vs. plain text body formatting, and dynamic content mappings — are team-dependent and must be configured based on each team's specific use case, recipient requirements, and workflow design. Teams are responsible for defining and validating these additional parameters as part of their own Logic App implementation.
- Define the Trigger
- Use an appropriate trigger: HTTP request, Azure Service Bus, scheduled recurrence, or Event Grid event
-
Ensure the trigger source is reachable within the VNet
-
Test the Logic App
- Run a manual trigger test
- Validate email receipt at the internal DL or
@optum.comaddress -
Verify the sending address shows the Non-User ID (not
.onmicrosoft.com) -
Enable Monitoring
- Connect Logic App diagnostics to Azure Monitor / Log Analytics
- Set up alerts for run failures
4.3 Java Code Integration
Teams with existing Java services can integrate directly with the Non-User ID sending identity. Teams are fully responsible for implementing, testing, and maintaining this integration.
- Retrieve credentials from Key Vault
- Use the Azure SDK for Java to retrieve Non-User ID credentials at runtime
-
Do not hard-code credentials in source code or configuration files
-
Authenticate as the Non-User ID
- Use MSAL4J to acquire an OAuth token with the appropriate Microsoft Graph mail scope
-
Alternatively, use the Non-User ID's SMTP credentials if configuring via SMTP relay
-
Send email via Microsoft Graph API or SMTP relay
- Graph API (recommended): Use the Microsoft Graph
sendMailendpoint authenticated with the Non-User ID token -
SMTP relay: Configure Jakarta Mail / JavaMail with the M365 SMTP endpoint using the Non-User ID credentials
-
Restrict recipients to internal addresses only
- Validate all recipient addresses are
@optum.comor internal DLs before sending -
Do not enable external routing — see Section 5
-
Implement error handling and retry logic
- Handle throttling responses with appropriate backoff
-
Log all send failures to your team's monitoring platform
-
Test the integration
- Follow the test scenarios in Section 6
- Verify the sending address shows the Non-User ID (not
.onmicrosoft.com)
Important: All constraints from Section 4.1 Team Responsibilities apply. Teams are fully responsible for ensuring no PHI/PII is included in any email content.
5. Warning — Security and External Sending Considerations
⚠️ WARNING: External Email Sending
While the Non-User ID mailbox and the Office 365 connector are technically capable of sending to external recipients, this must not be enabled without explicit review and approval from the Security Architecture team.
Key considerations:
- Per-state regulations differ: The same sending solution cannot be uniformly applied across all states or clients. Some states have specific regulations governing automated communications, data handling, and notification requirements.
- Client-specific constraints: For client-facing implementations, the solution must be re-evaluated and re-architected in collaboration with the Architecture team. Do not repurpose this internal solution for client communications.
- Security review required: Any team that needs to send emails to external recipients must raise a formal request with the Security Architecture team for review on a per-state, per-client basis.
- PHI/PII risk: External sending dramatically increases the risk of PHI/PII data leaving the organization's control. Content classification and DLP policies must be verified before any external configuration is considered.
Action Required: If your use case requires external email sending, stop and engage the Security Architecture team before proceeding. Do not enable external routing in the Logic App connector or Java code without written approval.
6. Testing
The solution has been validated end-to-end. The following test scenarios were executed:
Test 1 — High-Volume Email via Logic App
| Attribute | Details |
|---|---|
| Approach Used | Logic App with Office 365 Connector (Standard Plan, VNet) |
| Volume | 100+ emails sent |
| Time to Complete | Less than 1 hour |
| Recipients | Internal distribution list (@optum.com) |
| Content | Non-PHI / non-PII operational notifications |
| Result | All emails delivered successfully; no throttling errors |
| Sending Domain | Organization custom domain via Non-User ID — not .onmicrosoft.com |

Test 2 — Attachment Testing via Logic App
| Attribute | Details |
|---|---|
| Approach Used | Logic App with Office 365 Connector (Standard Plan, VNet) |
| Attachment Types Tested | PDF, TXT |
| Content | Non-sensitive test files |
| Result | Attachments delivered successfully to internal recipient |


Testing Notes
- Testing was conducted with the Non-User ID account as the sender — validating the end-to-end provisioning and connection flow
- The Logic App was confirmed to be operating within the VNet during testing
- No PHI or PII data was used in any test scenario
- For teams running their own tests, replicate these test cases before going to production
7. Appendices
Appendix A — Acronyms
| Acronym | Definition |
|---|---|
| ACS | Azure Communication Services |
| DL | Distribution List |
| DLP | Data Loss Prevention |
| Graph API | Microsoft Graph API |
| IRM | Information Rights Management |
| MSAL | Microsoft Authentication Library |
| MOERA | Microsoft Online Email Routing Address |
| M365 | Microsoft 365 |
| NDR | Non-Delivery Report |
| PHI | Protected Health Information |
| PII | Personally Identifiable Information |
| SMTP | Simple Mail Transfer Protocol |
| SPF | Sender Policy Framework |
| DKIM | DomainKeys Identified Mail |
| DMARC | Domain-based Message Authentication, Reporting and Conformance |
| TLS | Transport Layer Security |
| VNet | Azure Virtual Network |
Appendix B — Links
| Resource | URL |
|---|---|
| [1] Microsoft Tech Community — Limiting Onmicrosoft Domain Usage for Sending Emails | https://techcommunity.microsoft.com/blog/exchange/limiting-onmicrosoft-domain-usage-for-sending-emails/4446167 |
| [2] Company Portal — How To: Create a Non-User ID | https://uhgazure.sharepoint.com/sites/PowerPlatformCoE/SitePages/HowTo_CreateNonUserID.aspx |
| [3] Microsoft — Manage Accepted Domains in Exchange Online | https://learn.microsoft.com/exchange/mail-flow-best-practices/manage-accepted-domains/manage-accepted-domains |
| [4] Microsoft — AD FS Overview | https://learn.microsoft.com/windows-server/identity/ad-fs/ad-fs-overview |
| --- |
Reference: MOERA Throttling Limits (from [1])
The following table summarizes the new .onmicrosoft.com (MOERA) email throttling enforcement introduced by Microsoft. Source: Microsoft Tech Community Blog [1].
New Throttling Rule:
100 external recipients per 24-hour rolling window per organization — applies to all outbound email sent from any
.onmicrosoft.comdomain. When exceeded, senders receive NDR:550 5.7.236.
Rollout Timeline (by Exchange seat count):
| Throttling Enforcement Start Date | Exchange Seats in Tenant |
|---|---|
| October 15, 2025 | Trial tenants |
| December 1, 2025 | Fewer than 3 seats |
| January 7, 2026 | 3 – 10 seats |
| February 2, 2026 | 11 – 50 seats |
| March 2, 2026 | 51 – 200 seats |
| April 1, 2026 | 201 – 2,000 seats |
| May 4, 2026 | 2,001 – 10,000 seats |
| June 1, 2026 | More than 10,001 seats |
Impact for our organization: As of March 2, 2026, the throttling limit is in effect for tenants with 51–200 Exchange seats. Organizations with 201+ seats will be affected from April 1, 2026 onward. The 100-recipient cap is org-wide — not per user or per mailbox — meaning all automated and manual sends from
.onmicrosoft.comaddresses are counted against the same shared pool.This is the primary driver for this solution. Even with valid M365 licenses, the MOERA domain throttle applies. The Non-User ID solution avoids this entirely by sending from the organization's custom domain (e.g.,
@optum.com).
Document maintained by the Architecture team. For questions, corrections, or updates, raise a request via the company portal or contact the Architecture team directly.