MENU

JMS Lalabel _フェーズ2-機能追加(メルアドによる既存

24年11月頃に大井が対応した内容を備忘録として記載


CSVメールチェック機能 実装まとめ

目次

1. 実装の背景と目的

本機能は、不正または不要なメールアドレスを受注時点でチェックし、事前に弾く仕組みを導入することを目的としています。
既存注文テーブルのデータ移行や、CSV経由でのブラックリスト登録、定期的なクリーニングを通して、データ精度を維持できるよう設計しました。


2. 確認用URL一覧


3. Artisan コマンド

  • CSVインポート
    php artisan csv:email-import
  • 過去データ移行
    php artisan emails:migrate-old
  • 無効メール削除 & インデックス再構築
    php artisan emails:delete-invalid
  • 14日前のチェック削除
    php artisan emails:delete-old-checks
  • メンテナンス切替
  • 有効化: php artisan down
  • 解除: php artisan up

4. 主な実装ポイント

(1) Sorryページ

  • 新規ビュー: resources/views/sorry
  • コントローラー: SorryURLController.php
  • 入力チェックロジックを InputCheckMailParts.php にクラス化し、テスト用メール(大井さん・姉川さん)は除外。
  • $SorryPageURL = "/sorry" を基準にリダイレクト。

(2) テーブル構成

  • email_checks … 注文時にチェック対象となるメール保存用
  • imported_emails … CSVアップロードによる取込用

作成コマンド:

php artisan make:migration create_email_checks_table
php artisan make:migration create_imported_emails_table
php artisan migrate

(3) CSVアップロード機能

  • コントローラー: ImportedEmailController.php(ファイルサイズ上限 500KB に変更)
  • モデル: ImportedEmail.php
  • ビュー: resources/views/upload-email-csv
  • 共通処理: CsvProcessor.php
  • 保存先: storage/app/CsvEmailCheck

注意点

  • 本番での初回登録は 85万件のCSV10万件ごとに分割処理
  • サーバー側最大アップロードサイズは 1GB

(4) バッチ処理

  • CsvEmailImport.php … CSVバッチ取込(2MB制限・14日前CSV削除機能付き)
  • TransferOldEmailsToChecks.php … 旧注文テーブルからの移行
  • DeleteInvalidEmails.php … 削除フラグ付きレコードを物理削除&インデックス再構築
  • DeleteOldEmailChecks.php … 14日前のレコード削除

(5) メール通知

  • メールクラス: CsvProcessingResult.php
  • テンプレート: csv_processing_result.blade.php
    → CSV処理完了後に結果を管理者へ通知。

(6) 注文処理との連携

  • EmailCheckService.phpemail_checks への保存ロジック(テストユーザーは除外)
  • 関連コントローラー:
  • ConfirmFormController.php
  • UpSellConfirmFormController.php
  • UpSellInputFormController.php(編集時にNGメールがすり抜けないよう処理追加)

(7) メンテナンス対応

  • ビュー: resources/views/maintenance
  • コントローラー: MaintenanceController.php
  • CSS: public/common/css(Sorryページと共通フッター)
  • IP制御: PreventRequestsDuringMaintenance.php

運用上の注意

  • リリース当日は先にファイルをアップし、php artisan down でメンテナンスモードを有効化。

5. ログ・補足

  • ログ保存先: storage/logs/user/2024/12
  • createInsertTableVal.php にて受注IDをログ出力。
  • LPセッション引き渡し基準: pageInit.blade.php

6. 注意点まとめ

  • CSVは分割必須(10万件ごと)。一括だとエラーが発生。
  • ファイルサイズ制限
  • 手動アップロード: 500KB
  • バッチ取込: 2MB
  • 定期クリーニング
  • imported_emails: 削除フラグレコードを物理削除
  • email_checks: 14日前レコード削除

この記事を書いた人

目次