24年11月頃に大井が対応した内容を備忘録として記載
CSVメールチェック機能 実装まとめ
目次
1. 実装の背景と目的
本機能は、不正または不要なメールアドレスを受注時点でチェックし、事前に弾く仕組みを導入することを目的としています。
既存注文テーブルのデータ移行や、CSV経由でのブラックリスト登録、定期的なクリーニングを通して、データ精度を維持できるよう設計しました。
2. 確認用URL一覧
- LP新機能ページ: https://st2.macchialabel.com/ad/lp-new-features
- CSVアップロード: https://st2.macchialabel.com/upload_email_csv
- Sorryページ: https://st2.macchialabel.com/sorry
- テストLP: https://st2.macchialabel.com/ad/ls_8fsp8_5_kta_up_tei_gp3_test/
- メンテナンスページ: https://st2.macchialabel.com/maintenance
- ローカル確認: http://127.0.0.1:8000/ad/ayu_60_a/index
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万件のCSV → 10万件ごとに分割処理。
- サーバー側最大アップロードサイズは 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.php
…email_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日前レコード削除