Skip to content

[システム管理] Microsoft 365 OAuth2認証によるメール送信機能を追加しました#2290

Merged
masaton0216 merged 10 commits intomasterfrom
OW-2646
Oct 15, 2025
Merged

[システム管理] Microsoft 365 OAuth2認証によるメール送信機能を追加しました#2290
masaton0216 merged 10 commits intomasterfrom
OW-2646

Conversation

@masaton0216
Copy link
Contributor

@masaton0216 masaton0216 commented Oct 15, 2025

概要

SMTP認証に加えて、Microsoft 365のOAuth2認証(Client Credentials Grant方式)によるメール送信機能を追加しました。

背景・目的

  • SMTP認証では基本認証が廃止される流れがあり、OAuth2認証への対応が必要
  • Microsoft 365環境でのセキュアなメール送信を実現
  • 管理者が認証方式を選択できるようにし、既存のSMTP認証も継続利用可能

変更内容

1. 認証方式の切り替え機能

  • システム管理 > メール設定に「認証方式」選択機能を追加
  • SMTP認証とMicrosoft 365 OAuth2認証を切り替え可能
  • 認証方式変更時に確認ダイアログを表示

2. Microsoft 365 OAuth2認証機能

  • Client Credentials Grant方式でアクセストークンを取得
  • トークンの自動更新機能(有効期限5分前に再取得)
  • Microsoft Graph API経由でメール送信
  • 設定情報とトークンの暗号化保存

3. セキュリティ対策

  • クライアントシークレット・アクセストークンの暗号化保存

4. アーキテクチャ設計

  • サービス層の導入による責務分離
    • コントローラー: HTTPリクエスト/レスポンス制御
    • サービス: OAuth2認証、設定管理、バリデーション
    • トランスポート: メール送信処理

5. 新規追加ファイル

  • app/Enums/MailAuthMethod.php: 認証方式のEnum定義
  • app/Services/Ms365MailOauth2Service.php: OAuth2トークン管理サービス(303行)
  • app/Mail/Transport/MicrosoftGraphTransport.php: Microsoft Graph API用メールトランスポート(196行)
  • app/Providers/MailServiceProvider.php: カスタムメールトランスポート登録(100行)
  • database/migrations/2025_10_09_160056_add_mail_oauth2_to_configs.php: OAuth2設定用マイグレーション

6. 既存ファイルの変更

  • app/Plugins/Manage/SystemManage/SystemManage.php: メール設定管理機能の追加
    • バリデーション・設定保存処理をサービス層に移管(コードを51%削減)
  • app/Providers/MailServiceProvider.php: 認証方式に応じたメールドライバー切り替え
  • resources/views/plugins/manage/system/mail.blade.php: UI追加
  • config/app.php: MailServiceProviderの登録
  • .env.example: Microsoft 365設定例の追加

7. テストの追加

  • tests/Unit/Services/Ms365MailOauth2ServiceTest.php: 14テストケース
  • tests/Unit/Mail/Transport/MicrosoftGraphTransportTest.php: 11テストケース
  • 全25テストケース、すべて合格

8. パッケージ追加

  • league/oauth2-client: OAuth2クライアント基盤

技術的な特徴

  • カテゴリ名 mail_oauth2_ms365_app で、プロバイダーと認証フロー別に管理
  • トークン期限管理により無駄なAPI呼び出しを削減
  • SOLID原則に準拠した設計(責務分離、依存性注入)
  • 包括的なテストカバレッジ(709行)

変更統計

15ファイル変更
+1,861行 / -12行

新規ファイル: 7ファイル(うちテスト: 2ファイル)
変更ファイル: 8ファイル
テストコード: 709行

レビュー完了希望日

急ぎません

関連Pull requests/Issues

なし

参考

DB変更の有無

有り

マイグレーションファイル: database/migrations/2025_10_09_160056_add_mail_oauth2_to_configs.php

チェックリスト

@masaton0216 masaton0216 merged commit a355a03 into master Oct 15, 2025
1 check passed
@masaton0216 masaton0216 deleted the OW-2646 branch October 15, 2025 12:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant