已为您预填好的配置
把您的值输入一次,下面每条命令都会自动重写——应用名称、访问策略、验证测试和预检邮件。把每个代码块直接复制进 PowerShell 就行。
您的七个值
值将在这段时间后清除
已清除 — 闲置 15 分钟后,您填的值已被移除。请重新输入以继续。
运行 Matomo 的主机。它决定 Entra 应用名称和客户端密码的描述。
来自应用注册的“概述”页面。这是标识符,不是机密。
同样来自那个“概述”页面。
创建密码时只显示一次的“值”这一列——不是密码 ID。它只用在下面的预检代码块里,绝不会出现在摘要中。
Matomo 将以之发信的共享邮箱。
您租户的内置域名——已根据发件人地址预填;如果您的不一样,请自行修改。
您在 admin.microsoft.com 使用的账户——通常是 admin@…onmicrosoft.com 这类账户,而不是您的日常邮箱。
推导出的名称
- Entra 应用名称
missivus-matomo-analytics.example.com- 客户端密码描述
missivus-matomo-analytics.example.com- 安全组地址
noreply-apps@yourcompany.onmicrosoft.com
安装模块并登录
会弹出一个浏览器窗口;请用管理员账户登录。Windows 自带 PowerShell;在 macOS 上先运行 `brew install --cask powershell`,再运行 `pwsh`。
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser
Connect-ExchangeOnline -UserPrincipalName {{admin}}创建安全组
它唯一的成员就是您的共享邮箱。请记下 PowerShell 打印出的 PrimarySmtpAddress——它通常在租户的内置域上,而且正是下一条命令需要的值。
New-DistributionGroup -Name "NoReply Apps" -Alias noreply-apps -Type Security -Members "{{sender}}"把应用锁定到这个组
只有一行。正是这一步把“一个能以任何人身份发信的应用”变成“一个只能以恰好一个地址发信的应用”。
New-ApplicationAccessPolicy -AppId "{{clientId}}" -PolicyScopeGroupId "{{group}}" -AccessRight RestrictAccess -Description "Missivus (Matomo) may only send as {{sender}}"验证——先等 5 分钟
第一行必须显示 AccessCheckResult Granted,第二行必须显示 Denied。第二行用的是占位符——请把它换成您租户里任意另一个真实邮箱,用您自己的地址也行。在它显示 Denied 之前,请不要继续往下走。
Test-ApplicationAccessPolicy -Identity "{{sender}}" -AppId "{{clientId}}"
Test-ApplicationAccessPolicy -Identity "{{other}}" -AppId "{{clientId}}"预检——用 PowerShell 真发一封邮件
这一步可选,但强烈建议——它能在 Matomo 参与之前就端到端验证租户、应用、密码和策略。如果第一部分打印出 20 个字符,说明认证正常。出现 StatusCode 202 并且收件箱里收到邮件,就说明 Microsoft 那一侧已经完成。请把收件人占位符换成您自己的邮箱。
$TenantId = "{{tenantId}}"
$ClientId = "{{clientId}}"
$Secret = "{{secret}}"
$tok = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token" -Body @{ client_id=$ClientId; client_secret=$Secret; scope="https://graph.microsoft.com/.default"; grant_type="client_credentials" }
$tok.access_token.Substring(0,20)$body = '{"message":{"subject":"Missivus pre-flight","body":{"contentType":"Text","content":"Graph app-only send OK"},"toRecipients":[{"emailAddress":{"address":"{{other}}"}}]},"saveToSentItems":false}'
Invoke-WebRequest -Method Post -Uri "https://graph.microsoft.com/v1.0/users/{{sender}}/sendMail" -Headers @{ Authorization = "Bearer $($tok.access_token)" } -ContentType "application/json" -Body $body | Select-Object StatusCode清理并退出登录
密码曾经被输入到这个窗口里,所以请先清除它,再关闭 PowerShell。
Remove-Variable Secret,tok,body
Disconnect-ExchangeOnline存进您的密码管理器
把下面这段复制到密码管理器条目的备注里。它保存了轮换密码时会用到的各种标识符——密码本身是刻意没有放进去的。
{{summaryAppName}}: {{appName}}
{{summaryTenantId}}: {{tenantId}}
{{summaryClientId}}: {{clientId}}
{{summaryGroup}}: {{group}}
{{summarySender}}: {{sender}}
{{summaryExpiry}}然后在 Matomo 里收尾
在“管理 → 系统 → 常规设置 → Missivus”中填入租户 ID、客户端 ID、密码和发件人,勾选“通过 Microsoft Graph 发送邮件”,保存,然后点击“发送测试邮件”。