Let’s be honest—email address policies in Exchange Server 2019 aren’t exactly thrilling. But if you’ve ever had to clean up a messy address schema across hundreds of mailboxes, you know how critical they are. I’ve been through that cleanup more than once, and trust me, it’s not something you want to wing.
Why I Started Using Email Address Policies
Back when I migrated a mid-sized org to Exchange 2019, we had a Frankenstein mix of email formats: some users had first.last@domain.com, others had initials, and a few had legacy aliases from the 2007 era. It was chaos. I needed a way to standardize addresses without manually editing each mailbox—and that’s where email address policies came in.
My Setup and Walkthrough
I usually work on a Hyper-V lab running Exchange 2019 CU13, with 32GB RAM and a couple of test domains. Here’s how I typically configure email address policies:
- Accessing the EAC: I start with the Exchange Admin Center. It’s not flashy, but it gets the job done. Head to Mail Flow > Email Address Policies.
- Creating a New Policy: Click the plus icon. I name policies based on department or region—like “Sales-India-Policy”—just to keep things tidy.
- Address Format: I prefer using
%g.%s@domain.comfor most users. It’s clean and predictable. If you’re dealing with duplicate names, consider adding%ior%mto avoid collisions. - Recipient Filters: This part can be tricky. I’ve had filters accidentally exclude users because of a missing OU or group membership. Always double-check your conditions.
- Priority Settings: If you’ve got multiple policies, set the priority carefully. I once had a lower-priority policy override a higher one because I forgot to reapply it after a change.
- Applying the Policy: You can apply it immediately or schedule it. I usually run it off-hours using PowerShell—less risk of interrupting mailbox access.
Gotchas and Weird Behavior
Not gonna lie, the first time I applied a policy, I expected instant results. Nope. The changes didn’t reflect until I manually triggered the update via PowerShell. The GUI doesn’t always show you what’s happening under the hood.
Also, if you’re using custom SMTP templates, brace yourself. The variable syntax (%g, %s, %rxy, etc.) is powerful but unforgiving. One misplaced character and you’ll end up with addresses like ..@domain.com. Been there.
You can use the variables listed in the following table to specify values for the local part of the email address.
| Variable | Value |
|---|---|
| %d | Display Name |
| %g | Given Name (First Name) |
| %i | Middle initial |
| %m | Exchange Alias |
| %rxy | Replace all occurrences of X with Y |
| %rxx | Remove all occurrences of X |
| %s | Surname (last name) |
| %ng | The first n letters of the first name. For example, %2g uses the first two letters of the first name. |
| %ns | The first n letters of the last name. For example, %2s uses the first two letters of the last name. |
Lessons Learned
- Always test your policy on a small group first. I use a “TestPolicy” applied to a dummy OU.
- Document your templates and filters. Six months later, you won’t remember why you used
%2g.%2s. - Use PowerShell for bulk updates. The EAC is fine for setup, but PowerShell gives you control.
Final Thoughts
Managing email address policies isn’t glamorous, but it’s one of those things that quietly keeps your environment sane. Once you’ve got a solid naming convention and a few reusable templates, it’s mostly set-and-forget—until someone changes their name or moves departments, of course.
Ever had a policy misfire and rename half your mailboxes? Or found a better way to handle aliases across hybrid setups? Drop a comment or share your war stories—I’d love to hear how others are handling this.
Download the PowerShell cmdlets used on the video from below.