Dengan penggunaan e-mel yang meluas dalam kehidupan dan kerja harian kita, banyak tapak web dan aplikasi perlu menghantar sejumlah besar e-mel. Walau bagaimanapun, dalam kes jumlah e-mel yang banyak dihantar, penghantaran segerak boleh menyebabkan kemerosotan prestasi tapak web kerana PHP mesti menunggu e-mel dihantar selesai sebelum ia boleh terus dijalankan.
Untuk mengelakkan masalah ini, anda boleh menggunakan teknologi penghantaran tak segerak untuk menghantar e-mel. Artikel ini akan memperkenalkan teknologi PHP untuk melaksanakan penghantaran e-mel tak segerak.
Langkah 1: Pasang dan konfigurasikan sistem baris gilir
Untuk mencapai penghantaran e-mel tak segerak, kita perlu menggunakan sistem baris gilir. Sistem baris gilir ialah sistem yang menyimpan tugas dalam baris gilir dan memprosesnya dalam susunan masuk dahulu, keluar dahulu.
Pada masa ini terdapat banyak sistem baris gilir yang popular, seperti Beanstalkd, RabbitMQ, Redis, dll. Sistem beratur ini mempunyai perpustakaan PHP yang boleh digunakan dengan mudah.
Kami mengambil Beanstalkd sebagai contoh untuk memperkenalkan. Untuk menggunakan Beanstalkd, kita perlu memasangnya pada pelayan terlebih dahulu. Untuk kaedah pemasangan, sila rujuk kepada dokumentasi rasmi.
Selepas pemasangan, kami perlu mengkonfigurasi Beanstalkd untuk menetapkan port pendengarannya dan tetapan lain. Sila rujuk kepada dokumentasi rasmi untuk butiran konfigurasi.
Langkah 2: Tulis tugas baris gilir
Setelah kami mengkonfigurasi Beanstalkd dan menggunakannya sebagai sistem baris gilir kami, kami perlu menulis tugas baris gilir untuk mengendalikan penghantaran e-mel.
Tugas baris gilir hendaklah mengandungi kandungan berikut:
Berikut ialah contoh:
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]; } }
Dalam contoh ini, kami mentakrifkan kelas bernama SendEmailJob, yang menerima parameter berkaitan e-mel dan memanggil PHPMailer dalam kaedah pemegang untuk menghantar mel. Jika e-mel berjaya dihantar, kami akan mengembalikan tatasusunan dengan maklumat kejayaan, jika tidak, kami akan mengembalikan tatasusunan dengan maklumat ralat.
Langkah 3: Tambahkan tugasan mel pada baris gilir
Setelah kami menulis tugas baris gilir, kami perlu menambahkannya pada baris gilir dalam Beanstalkd. Ini boleh dicapai dengan menggunakan perpustakaan Beanstalkd.
Berikut ialah contoh:
$job = new SendEmailJob('recipient@example.com', 'Subject', 'Body'); $payload = json_encode($job); $connection = new PheanstalkPheanstalk('127.0.0.1'); $connection->useTube('emails')->put($payload);
Dalam contoh ini, kami mencipta tika SendEmailJob dan menukarnya kepada rentetan berformat JSON. Kami kemudian membuat sambungan ke Beanstalkd dan menambah tugasan pada paip baris gilir yang dipanggil e-mel.
Langkah 4: Proseskan Tugasan Baris
Sebaik sahaja kami menambah tugasan pada baris gilir, kami memerlukan proses untuk mengendalikan tugasan baris gilir.
Proses ini hendaklah:
Berikut ialah contoh:
$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); } }
Dalam contoh ini, kami mencipta gelung sementara yang berterusan berjalan, mendapat tugas baris gilir bernama e-mel daripada baris gilir dan memanggil Cara mengendalikan tugas beratur.
Jika pemprosesan berjaya, kami mengalih keluar tugasan daripada baris gilir, jika tidak, kami meletakkan semula tugas itu ke dalam baris gilir untuk pemprosesan masa hadapan.
Ringkasan
Di atas ialah teknologi PHP untuk melaksanakan penghantaran e-mel tak segerak Ia terbahagi terutamanya kepada empat langkah: memasang dan mengkonfigurasi sistem baris gilir, menulis tugasan gilir, menambah tugasan e-mel ke. baris gilir, dan proses baris gilir Tugas.
Menggunakan sistem baris gilir boleh meningkatkan kelajuan penghantaran e-mel dan prestasi aplikasi PHP dengan sangat baik. Ia juga meningkatkan kebolehhantaran e-mel dengan membenarkan kami mengendalikan e-mel yang gagal dengan lebih cekap.
Atas ialah kandungan terperinci Teknologi PHP untuk melaksanakan penghantaran e-mel tak segerak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!