Using classic Outlook for Windows in business environments
Found the root cause and a working fix.
Confirming first that I hit both dead ends already reported in this thread: AllowVoicemailForm=1 gives a play control and still hides the attachment, and forwarding to self works. Our source is Avaya IP Office Voicemail Pro rather than Teams, same symptom, which points at the message class rather than the phone system.
Root cause
The voicemail email carries a Content-Class: voice header. Exchange Online's MIME-to-MAPI conversion reads that and stamps PR_MESSAGE_CLASS as IPM.Note.Microsoft.Voicemail.UM. Outlook Classic routes that class to Microsoft's native voicemail handling, which claims the audio part and does not list it in the attachment well. It fails silently, with no error and no banner.
New Outlook and OWA do not use that rendering path, which is why they display correctly. Forwarding works because the forwarded copy is created as a plain IPM.Note.
Worth noting that the Microsoft known-issue article "VoiceMail forms do not work in Outlook Desktop" is the inverse problem. Its symptom is "users no longer see the form, instead they see a raw MP3 attachment," and its fix restores the form. Its "Fixed" status does not apply to us, so waiting on a newer Outlook build will not help.
Fix
Strip the header in transport so the items land as ordinary mail. This is the rule I verified in production:
New-TransportRule -Name "Strip_Content_Class_Voicemail" `
-HeaderMatchesMessageHeader "X-Mailer" `
-HeaderMatchesPatterns "Voicemail Pro" `
-RemoveHeader "Content-Class" `
-Priority 24 `
-Mode Enforce
X-Mailer: Voicemail Pro Server is Avaya-specific. For Teams voicemail you would match on the Content-Class header itself instead, which is portable across any voicemail source:
-HeaderMatchesMessageHeader "Content-Class" -HeaderMatchesPatterns "voice"
I have not tested that variant, only the Avaya one.
Three cautions before deploying
- Pilot it first with
-SentTo ******@domain.com, then clear that condition to widen. Rule changes take up to 30 minutes to replicate, so an immediate test can look like a failure when it is just propagation. - Check your retention and discovery scope. Run
Get-RetentionPolicyTag | Where-Object {$_.MessageClass -ne "*"},Get-JournalRule, and look for any eDiscovery or content search scoped bykind:voicemail. Reclassifying toIPM.Notemoves those items onto your default mail tag. In regulated or public-records environments that matters. - Teams-specific risk. The Teams client's voicemail view and transcription may key off this message class. I am on Avaya so I cannot test that. Verify before widening.
Limitations
This only affects new mail. Already-delivered voicemail is already converted and stays broken in Classic Outlook. Forward-to-self remains the workaround for those.
One transport rule gotcha
Use -HeaderMatchesMessageHeader with -HeaderMatchesPatterns rather than -HeaderContainsMessageHeader with -HeaderContainsWords. My first attempt used the ContainsWords form and silently never fired, never even appearing in message trace, because those predicates are word-tokenized. A value with a trailing @ and a multi-word phrase against a whole-word matcher both fail to match. Regex bypasses the tokenizer entirely.