Skip to content

Mail Contacts Hygiene

The question it answers: Which mail contacts are stale, duplicate guests, or point at domains that no longer receive mail?

Mail contacts pile up: partners who changed domain, suppliers who went out of business, people who are now guests as well. They produce wrong address-book entries and bounced replies.

Where in the appExchange Online › Mail Security & Hygiene › Mail Contacts Hygiene
WorkloadExchange Online
KindFindings list · dashboard tile
DataRead from Microsoft 365 when someone first opens it, then kept for the report cache lifetime (Settings > Data & cache, 1 hour unless changed). It reads through PowerShell (Exchange Online or SharePoint Online), so the first load takes longer than a Graph report.
LicenceNo extra licence needed.
Report id (API and MCP)exchange.hygiene.mail-contacts
ColumnKeyType
SeveritySeverityStatus
IssueCategoryText
ContactSubjectLink
CheckSettingText
External addressValueText
FindingFindingText
Matching guestDetailText
CreatedWhenDate
CountNumberNumber

A findings list hides columns that no row fills. Severity is Critical, Serious, Warning, OK or Info; rows rated Critical, Serious or Warning need attention (Working with findings).

Licence: No extra licence needed.

Application permissions on the IntensiveReports app registration (all permissions):

PermissionAPIWhat it allowsNote
Exchange.ManageAsAppOffice 365 Exchange OnlineManage Exchange As Application+ View-Only Recipients
User.Read.AllMicrosoft GraphRead all users’ full profilesguest duplicates
User-LifeCycleInfo.Read.AllMicrosoft GraphRead all users’ lifecycle informationwith
User.Read.AllMicrosoft GraphRead all users’ full profileswith
Data sources it reads
  • Get-MailContact
  • Resolve-DnsName MX per contact domain
  • GET /v1.0/users (guests)
GET /ir-api/v1/reports/exchange.hygiene.mail-contacts?size=100

An AI assistant reads it with the MCP tool get_report and the id exchange.hygiene.mail-contacts. The client needs the Read grant for Exchange Online. See Using the API.