日常生活や仕事で電子メールが広く使用されるようになり、多くの Web サイトやアプリケーションで大量の電子メールを送信する必要があります。ただし、大量の電子メールが送信される場合、PHP は実行を継続する前に電子メールの送信が完了するまで待機する必要があるため、同期送信によって Web サイトのパフォーマンスが低下する可能性があります。
この問題を回避するには、非同期送信テクノロジを使用して電子メールを送信します。この記事ではメールの非同期送信を実現するためのPHPの技術を紹介します。
ステップ 1: キュー システムのインストールと構成
電子メールの非同期送信を実現するには、キュー システムを使用する必要があります。キューイングシステムとは、タスクをキューに格納し、先入れ先出しで処理するシステムです。
現在、Beanstalkd、RabbitMQ、Redis など、人気のあるキューイング システムが多数あります。これらのキューイング システムには、簡単に使用できる PHP ライブラリがあります。
Beanstalkd を例として紹介します。 Beanstalkd を使用するには、まずサーバーにインストールする必要があります。インストール方法については公式ドキュメントを参照してください。
インストール後、Beanstalkd を構成してリスニング ポートやその他の設定を行う必要があります。設定の詳細については公式ドキュメントを参照してください。
ステップ 2: キュー タスクを作成する
Beanstalkd を構成してキュー システムとして使用したら、電子メールの送信を処理するキュー タスクを作成する必要があります。
キュー タスクには次の内容が含まれている必要があります:
次は例です:
class SendEmailJob { protected $to; protected $subject; protected $body; public function __construct($to, $subject, $body) { $this->to = $to; $this->subject = $subject; $this->body = $body; } public function handle() { $mailer = new PHPMailer(); $mailer->setFrom('me@example.com', 'My Name'); $mailer->addAddress($this->to); $mailer->Subject = $this->subject; $mailer->Body = $this->body; if (!$mailer->send()) { return ['success' => false, 'message' => $mailer->ErrorInfo]; } return ['success' => true]; } }
この例では、電子メール関連のパラメーターを受け取り、ハンドル メソッドで PHPMailer を呼び出してメールを送信する SendEmailJob という名前のクラスを定義します。電子メールが正常に送信された場合は、成功情報を含む配列を返します。そうでない場合は、エラー情報を含む配列を返します。
ステップ 3: メール タスクをキューに追加する
キュー タスクを作成したら、それを Beanstalkd のキューに追加する必要があります。これは、Beanstalkd ライブラリを使用して実現できます。
これは例です:
$job = new SendEmailJob('recipient@example.com', 'Subject', 'Body'); $payload = json_encode($job); $connection = new PheanstalkPheanstalk('127.0.0.1'); $connection->useTube('emails')->put($payload);
この例では、SendEmailJob のインスタンスを作成し、それを JSON 形式の文字列に変換します。次に、Beanstalkd への接続を作成し、電子メールと呼ばれるキュー パイプにタスクを追加しました。
ステップ 4: キュー タスクを処理する
タスクをキューに追加したら、キュー タスクを処理するプロセスが必要になります。
このプロセスでは次のことを行う必要があります:
例は次のとおりです:
$connection = new PheanstalkPheanstalk('127.0.0.1'); $connection->watch('emails'); while (true) { $job = $connection->reserve(); $payload = json_decode($job->getData(), true); $class = new $payload['class'](...$payload['args']); $result = $class->handle(); if ($result['success']) { $connection->delete($job); } else { $connection->bury($job); } }
この例では、継続的に実行される while ループを作成し、キューから email という名前のキューのタスクを取得し、How to handle を呼び出します。タスクをキューに入れます。
処理が成功した場合は、タスクをキューから削除します。そうでない場合は、今後の処理のためにタスクをキューに戻します。
まとめ
上記はメールの非同期送信を実現するためのPHPの技術で、主にキューシステムのインストールと設定、キュータスクの作成、メールタスクの追加の4つのステップに分かれています。キューとキューの処理タスク。
キュー システムを使用すると、電子メールの送信速度と PHP アプリケーションのパフォーマンスが大幅に向上します。また、失敗した電子メールをより効率的に処理できるため、電子メールの到達性も向上します。
以上が非同期メール送信を実装する PHP テクノロジーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。