


Méthode de mise en œuvre du mailing de masse asynchrone utilisant thinkphp5 et swoole
Cet article partage principalement avec vous la méthode d'implémentation du mailing de masse asynchrone dans thinkphp5 et swoole. J'espère qu'il pourra vous aider.
1. Description de l'environnement
Alibaba cloud centos7
thinkphp5.0.11
swoole2.0.8
2. Envoi d'emails
Créez le répertoire de fichiers suivant sous le projet :
Parmi eux, SendMail.php est le fichier que nous appelons réellement pour envoyer des emails . Voici le code principal : Les éléments de configuration de
namespace app\library\utils\mail;use app\library\utils\mail\PhpMailer;use app\library\utils\mail\Smtp;use think\Log; error_reporting(E_STRICT); date_default_timezone_set('Asia/Shanghai');class SendMail{ static function postmail($to,$subject = '',$body = ''){ $mail = new PhpMailer(); $mail->CharSet = config('mail.CharSet'); $mail->IsSMTP(); $mail->SMTPDebug = config('mail.SMTPDebug'); $mail->SMTPAuth = config('mail.SMTPAuth'); $mail->SMTPSecure = config('mail.SMTPSecure'); $mail->Host = config('mail.Host'); $mail->Port = config('mail.Port'); $mail->Username = config('mail.Username'); $mail->Password = config('mail.Password'); $mail->SetFrom(config('mail.From'), config('mail.Name')); $mail->Subject = $subject; $mail->MsgHTML($body); $address = $to; $mail->AddAddress($address, ''); if(!$mail->Send()) { Log::write('send to '.$to.'error info:'.$mail->ErrorInfo); return false; } else { return true; } } }
sont placés dans le fichier config.php sous le projet. Le contenu de configuration spécifique est le suivant :
//邮箱设置 'mail'=>[ 'CharSet'=>'UTF-8', 'SMTPDebug'=>0,// 启用SMTP调试功能 0关闭 'SMTPAuth'=>true,// 启用 SMTP 验证功能 'SMTPSecure'=>'ssl',// 安全协议 'Host'=>'smtp.163.com',// SMTP 服务器 'Port'=>465,// SMTP服务器的端口号 'Username'=>'**********',// SMTP服务器用户名 'Password'=>'**********',// SMTP服务器密码 'From'=>'*********@163.com',// 发件人邮箱 'Name'=>'blue',// 发件人邮箱 ]
. 2.1
Ici nous implémentons uniquement la démo envoyée par le protocole SMTP, elle n'est donc pas très complète et flexible au niveau packaging. Les deux autres fichiers de l'image (PhpMailer.php et Smtp.php) sont les fichiers de base de la classe d'envoi d'e-mails Phpmailer. Afin de simplifier l'appel, ils sont extraits. Pour une utilisation détaillée et les paramètres, vous pouvez vous référer à l'utilisation de gayhub. instructions phpmailer
2.2 Notes
Dans cette étape, nous devons prêter attention à quelques points : 1. Si le compte que vous avez défini pour envoyer l'e-mail a activé SMTP et trouver le protocole de sécurité correspondant et le numéro de port. 2. Si le serveur actuel prend en charge le service SMTP, qui est souvent affecté par certaines fonctions du socket, lorsque nous rencontrons des problèmes, nous devons définir le paramètre SMTPDebug sur 1, puis déboguer soigneusement en fonction des informations de débogage. 3. Certains e-mails sortants seront mis à la corbeille, veuillez les vérifier attentivement.
2.3 Appelez
pour établir la structure de répertoires de fichiers suivante :
Appelez la méthode d'envoi d'e-mails dans Index.php, le spécifique le code est le suivant
public function sendMail() { if(SendMail::postmail('937069176@qq.com','test','123')) { echo 'send success'; }else{ echo 'send fail'; } }
2.4 Résultat de l'appel
On peut retrouver un email qu'on vient d'envoyer dans la poubelle de QQ boîte aux lettres
3. Combiner avec swoole pour réaliser un envoi de masse asynchrone
3.1 Installer swoole
Les étapes détaillées pour l'installation de l'extension swoole sont disponibles sur le site officiel, donc je ne vais pas le faire. Pour entrer dans les détails, le portail de documents swoole
Après avoir installé swoole, il est recommandé d'ajouter des invites de code swoole à votre IDE et de configurer le portail pour les invites IDE swoole code
3.2 Implémenter l'envoi de masse asynchrone
Nous avons d'abord implémenté le serveur asynchrone :
/** * description:服务端 */ public function syncSend(){ $serv = new \swoole_server('0.0.0.0',8082); $serv->set(array('task_worker_num' => 4)); $serv->on('receive', function($serv, $fd, $from_id, $data) { $task_id = $serv->task($data); echo "开始投递异步任务 id=$task_id\n"; }); $serv->on('task', function ($serv, $task_id, $from_id, $data) { echo "接收异步任务[id=$task_id]".PHP_EOL; for ($i = 0 ; $i<20;$i++){ if(SendMail::postmail('937069176@qq.com','test',$data)){ echo 'send'.$i.' success'."\n"; }else{ echo 'send'.$i.' fail'."\n"; } } $serv->finish(''); }); $serv->on('finish', function ($serv, $task_id, $data) { echo "异步任务[id=$task_id]完成".PHP_EOL; }); $serv->start(); }
Côté serveur, nous avons utilisé une boucle de 20 pour simuler l'envoi de masse, et l'avons en fait changée en une adresse e-mail différente.
Ensuite, nous implémentons le client
/** * description:客户端 */ public function index() { $client = new \swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); $ret = $client->connect("127.0.0.1", 8082); if(empty($ret)){ echo 'error!connect to swoole_server failed'; } else { $client->send('blue');//这里只是简单的实现了发送的内容 } }
3.3 Démarrez le serveur
Vous devez utiliser la méthode CLI ici, nous entrons dans le répertoire racine du projet.
Exécuter
netstat -apn | grep 8082
Surveillez d'abord si le port 8082 est occupé,
kill -9 PID(进程号)
Tuez le processus
Ensuite, nous exécutons
.php public/index.php index/index/syncSend
La fonction de cette commande est d'utiliser le mode cli pour mettre notre port 8082 en état d'écoute. Et gardez ce terminal actif pour que nous puissions visualiser les résultats envoyés.
接着我们可以用CLI或者浏览器访问的方式来访问我们的客户端
php public/index.php index/index/index
当我们执行一次的时候客户端的时候,我们可以在服务端的终端看到屏幕上面出现如下的画面:
说明我们已经正常群发了。
下面,我们就来测试异步,因为163服务器会对IP进行检测,如果在某个时间发送也别频繁的话,会出现发送失败的情况,所以我们测试的时候,采用连续执行4次客户端的方式
下面是执行的结果:
从图中发送的顺序来看,我们可以很容易的判断,我们已经实现了异步的发送。
邮箱里面也接收到了刚刚发送的邮件。
4、后记~
swoole是一种想要熟悉和熟练使用的扩展,但是限于网络编程知识的不足,所以还是要多多测试和学习,demo中有不足的地方,还请指出。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.
