あらかじめ埋まった、あなたのセットアップ
値を一度入力すれば、以下のコマンドがすべて書き換わります。アプリ名、アクセス ポリシー、検証テスト、事前確認メールまで。各ブロックをそのまま PowerShell に貼り付けてください。
7 つの値
値が消えるまで
消去しました — 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}}"アプリをグループに固定する
1 行だけです。この手順によって、誰としてでも送信できるアプリが、ちょうど 1 つのアドレスとしてのみ送信できるアプリに変わります。
New-ApplicationAccessPolicy -AppId "{{clientId}}" -PolicyScopeGroupId "{{group}}" -AccessRight RestrictAccess -Description "Missivus (Matomo) may only send as {{sender}}"検証する — まず 5 分待つ
1 行目は AccessCheckResult が Granted、2 行目は Denied と表示される必要があります。2 行目にはプレースホルダーが入っているので、テナント内の別の実在するメールボックスに置き換えてください。ご自身のアドレスで構いません。Denied と表示されるまで、先に進まないでください。
Test-ApplicationAccessPolicy -Identity "{{sender}}" -AppId "{{clientId}}"
Test-ApplicationAccessPolicy -Identity "{{other}}" -AppId "{{clientId}}"事前確認 — PowerShell から実際にメールを 1 通送る
任意ですが強く推奨します。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 経由でメールを送信する」にチェックを入れて保存し、「テストメールを送信」を押してください。