Skip to content

SendGrid API制限を考慮した送信スロット管理・予約送信機能の追加 #57

@fumikito

Description

@fumikito

概要

SendGrid のAPIには以下のような送信制限があるため、save_post フックで即座に全件送信する方式では制限に引っかかる可能性がある。

  • 最大レート: 1秒あたり100リクエスト
  • バッチ数制限: 1リクエスト最大1000件

これに対応するため、以下のような機能を hamail に追加したい。


実装方針

✅ 1. 投稿公開後に送信予約する

  • save_post 時点で即送信せず、wp_schedule_single_event() を使って 5分後 に送信処理を予約する。
  • これにより複数の同時投稿時などでもタイミングをずらして送信できる。
wp_schedule_single_event(time() + 300, 'hamail_send_scheduled_post', [$post_id]);

✅ 2. 送信をスロット単位で制御する

  • 送信対象ユーザーが多い場合は、以下のような単位でスロット分割:

    • 1スロットあたり最大 900件(安全マージン)
    • スロットごとに1秒以上の遅延を入れてスロット制御(例: sleep(1) または wp_schedule_single_event()

✅ 3. 各スロットの送信状況をコメントとして記録する

  • 送信ログを 投稿に紐づくコメント(wp_insert_comment として記録する。

  • コメントには以下のような情報を含める:

    • スロット番号(例: Slot 1/5)
    • 対象件数
    • 実行時刻
    • 成功件数/失敗件数

想定される構成(案)

  • Hamail_Scheduler クラスを新設して送信予約を担当
  • 実送信は既存の Hamail_Sender を活用しつつ、スロット分割とログ記録処理を追加
  • hamail_send_scheduled_post フックで送信予約後のトリガーを柔軟に処理

影響範囲

項目 影響
投稿直後の即時送信 停止(予約送信に切り替え)
高速バルク送信 スロット分割により安全に対応可能
ログの可視化 投稿コメントとして記録されることで可視化される

備考

  • より高度な管理(再送・キャンセル・進捗表示など)を行う場合、将来的に CPTベースのメールキュー構造の導入も検討できる。
  • 現時点では WordPress の wp_schedule_single_event() とコメントAPIを活用することで、追加ライブラリなしで実装可能。

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions