ホームページ  >  記事  >  バックエンド開発  >  非同期メール送信を実装する PHP テクノロジー

非同期メール送信を実装する PHP テクノロジー

WBOY
WBOYオリジナル
2023-05-22 08:22:512145ブラウズ

日常生活や仕事で電子メールが広く使用されるようになり、多くの Web サイトやアプリケーションで大量の電子メールを送信する必要があります。ただし、大量の電子メールが送信される場合、PHP は実行を継続する前に電子メールの送信が完了するまで待機する必要があるため、同期送信によって Web サイトのパフォーマンスが低下する可能性があります。

この問題を回避するには、非同期送信テクノロジを使用して電子メールを送信します。この記事ではメールの非同期送信を実現するためのPHPの技術を紹介します。

ステップ 1: キュー システムのインストールと構成

電子メールの非同期送信を実現するには、キュー システムを使用する必要があります。キューイングシステムとは、タスクをキューに格納し、先入れ先出しで処理するシステムです。

現在、Beanstalkd、RabbitMQ、Redis など、人気のあるキューイング システムが多数あります。これらのキューイング システムには、簡単に使用できる PHP ライブラリがあります。

Beanstalkd を例として紹介します。 Beanstalkd を使用するには、まずサーバーにインストールする必要があります。インストール方法については公式ドキュメントを参照してください。

インストール後、Beanstalkd を構成してリスニング ポートやその他の設定を行う必要があります。設定の詳細については公式ドキュメントを参照してください。

ステップ 2: キュー タスクを作成する

Beanstalkd を構成してキュー システムとして使用したら、電子メールの送信を処理するキュー タスクを作成する必要があります。

キュー タスクには次の内容が含まれている必要があります:

  1. 受信者アドレス、件名、内容など、電子メールの受信に関連するパラメーター。
  2. PHPMailerやSwiftMailerなどのPHPのメール送信機能を呼び出します。
  3. 後続の処理のために、電子メール送信の結果をキュー システムに返します。

次は例です:

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: キュー タスクを処理する

タスクをキューに追加したら、キュー タスクを処理するプロセスが必要になります。

このプロセスでは次のことを行う必要があります:

  1. キューからタスクを取得します。
  2. タスクのパラメータを解析します。
  3. タスク処理メソッドを呼び出します。
  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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。