Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua untuk mengawal bilangan e-mel menggunakan PHP

Petua untuk mengawal bilangan e-mel menggunakan PHP

WBOY
WBOYasal
2023-05-23 08:46:471401semak imbas

Dengan perkembangan dan pempopularan Internet, e-mel, sebagai cara komunikasi yang cekap, mudah dan menjimatkan, menjadi semakin popular dan digunakan secara meluas. Walau bagaimanapun, bilangan e-mel yang dihantar telah menjadi masalah Bagi pengirim, penghantaran e-mel yang berlebihan bukan sahaja akan menjejaskan kerja dan kehidupan biasa penerima, tetapi juga menjejaskan tanggapan dan penilaian penerima terhadap pengirim. Khususnya untuk pengendali, penyedia perkhidmatan dan perusahaan lain, menghantar sejumlah besar e-mel bukan sahaja akan menyebabkan kesesakan dalam sistem e-mel, tetapi juga menjejaskan prestasi dan kestabilan pelayan e-mel Dalam kes yang teruk, ia boleh mencetuskan dasar dan punca penapisan spam e-mel Dikenal pasti sebagai spam.

Oleh itu, apabila melaksanakan fungsi penghantaran e-mel, adalah sangat perlu dan penting untuk mengawal bilangan e-mel. Sebagai bahasa pengaturcaraan yang popular, PHP mempunyai banyak alat dan teknologi yang boleh mengawal bilangan e-mel dengan mudah. Berikut adalah beberapa teknik untuk mengawal bilangan e-mel.

1. Sekatan berasaskan pelayan SMTP

Apabila menggunakan pelayan SMTP untuk menghantar e-mel, pelayan SMTP biasanya mempunyai sekatan tertentu, seperti bilangan maksimum e-mel yang boleh dihantar setiap jam atau setiap hari. Oleh itu, kami boleh mengawal bilangan e-mel yang dihantar mengikut had pelayan SMTP. Pelaksanaan khusus adalah seperti berikut:

//连接SMTP服务器
$mail = new PHPMailer(true);
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'username';
$mail->Password = 'password';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

//添加收件人、主题、正文等信息

//发送邮件
if ($mail->send()) {
  echo '邮件发送成功';
} else {
  echo '邮件发送失败';
}

//获取SMTP服务器的发送限制
$limit = $mail->getSMTPInstance()->getSendLimit();
if ($limit) {
  echo 'SMTP服务器每小时最多可以发送'.$limit.'封邮件';
}

Dalam kod di atas, kami menyambung ke pelayan SMTP melalui kelas PHPMailer, dan menetapkan maklumat berkaitan pelayan SMTP, kemudian menambah penerima, subjek, badan dan lain-lain maklumat, dan akhirnya hubungi send()Kaedah untuk menghantar mel. Jika e-mel berjaya dihantar, "E-mel dihantar dengan jayanya" adalah output, jika tidak "E-mel dihantar gagal" adalah output.

Seterusnya, kami memperoleh objek contoh pelayan SMTP melalui kaedah getSMTPInstance(), dan kemudian panggil kaedah getSendLimit() untuk mendapatkan bilangan e-mel maksimum yang boleh dihantar oleh pelayan SMTP setiap jam. Jika nilai pulangan ialah 0, ini bermakna tiada had, jika tidak, had penghantaran tertentu dikembalikan.

2. Kawalan berdasarkan baris gilir mel

Baris gilir mel ialah teknologi biasa yang mencapai ini dengan menyimpan sementara e-mel untuk dihantar dalam baris gilir dan kemudian menghantarnya satu demi satu mengikut peraturan tertentu. Tujuan mengawal bilangan dan kelajuan menghantar e-mel. Pelaksanaan khusus adalah seperti berikut:

//将待发送的邮件添加到队列中
function addToQueue($to, $subject, $message) {
  $queueFile = 'mail_queue.txt';
  $data = serialize(array('to'=>$to, 'subject'=>$subject, 'message'=>$message));
  file_put_contents($queueFile, $data."
", FILE_APPEND | LOCK_EX);
}

//按照队列中的顺序发送邮件
function processQueue() {
  $queueFile = 'mail_queue.txt';
  if (!file_exists($queueFile) || !is_readable($queueFile)) {
    return false;
  }
  $f = fopen($queueFile, 'r');
  while ($data = fgets($f)) {
    $mail = unserialize(trim($data));
    $to = $mail['to'];
    $subject = $mail['subject'];
    $message = $mail['message'];
    //发送邮件
    //...
  }
  fclose($f);
  //清空队列
  file_put_contents($queueFile, '');
  return true;
}

Dalam kod di atas, kami mentakrifkan dua fungsi: addToQueue() dan processQueue(). Fungsi addToQueue() digunakan untuk menambah e-mel untuk dihantar ke baris gilir, yang mengandungi maklumat seperti penerima, subjek dan badan e-mel. Fungsi processQueue() digunakan untuk mengeluarkan e-mel daripada baris gilir dan menghantarnya satu demi satu mengikut susunan baris gilir.

Dalam pelaksanaan khusus, kami boleh mensirikan maklumat e-mel yang akan dihantar dan menyimpannya dalam fail teks, dan kemudian memanggil fungsi processQueue() dengan kerap di latar belakang untuk membaca maklumat e-mel satu demi satu dalam susunan baris gilir, dan Lakukan operasi penghantaran e-mel. Kaedah ini boleh mengelakkan masalah ranap sistem mel yang disebabkan oleh jumlah besar penghantaran mel secara tiba-tiba, dan juga dapat merealisasikan pemprosesan kelompok dan kawalan penghantaran mel.

3. Sekatan berasaskan pangkalan data

Pangkalan data juga merupakan cara biasa untuk mencapai kawalan penghantaran e-mel. Kami boleh menetapkan parameter yang berkaitan dalam pangkalan data, seperti bilangan maksimum e-mel yang boleh dihantar setiap jam atau sehari, dan kemudian bertanya dan menentukan sama ada had penghantaran telah melebihi apabila e-mel dihantar. Pelaksanaan khusus adalah seperti berikut:

//连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
if ($conn->connect_error) {
  die('数据库连接失败:'.$conn->connect_error);
}

//查询发送数量
$count = $conn->query("SELECT COUNT(*) as total FROM emails WHERE sent_date >= DATE_SUB(NOW(), INTERVAL 1 HOUR)");
if (!$count) {
  die('查询失败:'.$conn->error);
}
$row = $count->fetch_assoc();
$total = $row['total'];

//判断发送限制
if ($total >= 100) {
  die('发送数量已达限制');
}

//插入邮件信息
$stmt = $conn->prepare("INSERT INTO emails (recipient, subject, content, sent_date) VALUES (?, ?, ?, NOW())");
$stmt->bind_param('sss', $to, $subject, $content);
if (!$stmt->execute()) {
  die('邮件发送失败:'.$conn->error);
} else {
  echo '邮件已添加到队列';
}
$stmt->close();
$conn->close();

Dalam kod di atas, kami menyambung ke pangkalan data melalui mysqli, menanyakan bilangan e-mel yang dihantar dalam pangkalan data dalam sejam terakhir, dan kemudian menentukan sama ada had penghantaran telah melebihi. Jika melebihi had, penghantaran mel dihentikan, jika tidak, maklumat mel dimasukkan ke dalam pangkalan data dan menunggu program latar belakang diproses.

Perlu diingat bahawa apabila menggunakan pangkalan data untuk mengawal bilangan e-mel yang dihantar, kami perlu memasang dan mengkonfigurasi perisian pangkalan data yang sesuai dan menetapkan parameter yang berkaitan. Di samping itu, satu siri operasi kompleks seperti sambungan pangkalan data, pertanyaan, penyisipan dan penutupan diperlukan, menjadikan penulisan kod lebih menyusahkan.

Ringkasnya, mengawal bilangan e-mel yang dihantar adalah sangat diperlukan dalam aplikasi praktikal untuk mengelakkan kesesakan dan keruntuhan sistem e-mel dan memastikan operasi normal sistem e-mel. Dalam PHP, teknik untuk mengawal bilangan e-mel terutamanya termasuk sekatan berasaskan pelayan SMTP, kawalan berasaskan baris gilir mel dan sekatan berasaskan pangkalan data. Apabila memilih kaedah pelaksanaan tertentu, adalah perlu untuk mempertimbangkan dan menilai situasi khusus secara menyeluruh dan perlu memilih penyelesaian yang optimum.

Atas ialah kandungan terperinci Petua untuk mengawal bilangan e-mel menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn