In diesem Artikel wird hauptsächlich die detaillierte Implementierung von thinkphp5+swoole zur Implementierung des asynchronen Massenmailings (SMTP-Methode) vorgestellt, die einen gewissen Referenzwert hat.
Dieser Artikel stellt die Implementierung von thinkphp5+ vor swoole Asynchrones Massenmailing (SMTP-Methode), mit allen teilen, die Details sind wie folgt:
1. Umgebungsbeschreibung
Alibaba Cloud Centos7
thinkphp5.0.11
swoole2.0.8
2. tp erkennt E-Mail Senden
Erstellen Sie das folgende Dateiverzeichnis unter dem Projekt:
Unter diesen ist SendMail.php die Datei, die wir tatsächlich aufrufen E-Mails senden. Das Folgende ist der Hauptcode: Die Konfigurationskonfigurationselemente in
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; } } }
werden in der Datei config.php unter dem Projekt abgelegt. Der spezifische Konfigurationsinhalt lautet wie folgt :
//邮箱设置 '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 Hier implementieren wir nur die vom SMTP-Protokoll gesendete Demo, daher ist sie auf Verpackungsebene nicht sehr umfassend und nicht sehr flexibel. Die anderen beiden Dateien im Bild (PhpMailer.php und Smtp.php) sind die Kerndateien der E-Mail-Versandklasse von PHPMailer. Zur Vereinfachung des Aufrufs können Sie sich auf die Verwendung von gayhub beziehen Anleitung phpmailer
2.2 Hinweise
In diesem Schritt müssen wir auf einige Punkte achten: 1. Ob das Konto, das Sie zum Senden der E-Mail festgelegt haben, SMTP geöffnet hat und finden Sie das entsprechende Sicherheitsprotokoll und die Portnummer. 2. Ob der aktuelle Server den SMTP-Dienst unterstützt, der häufig von einigen Socket-Funktionen betroffen ist. Wenn Probleme auftreten, sollten wir den SMTPDebug-Parameter auf 1 setzen und dann sorgfältig anhand der Debug-Informationen debuggen. 3. Einige ausgehende E-Mails werden in den Papierkorb verschoben. Bitte überprüfen Sie diese sorgfältig.
2.3 Rufen Sie
auf, um die folgende Dateiverzeichnisstruktur einzurichten:
Rufen Sie die Methode zum Senden von E-Mails in Index.php auf. Der spezifische Code lautet wie folgt
public function sendMail(){ if(SendMail::postmail('937069176@qq.com','test','123')){ echo 'send success'; }else{ echo 'send fail'; } }
2.4 Anrufergebnis
Wir können finden, was wir gerade gesendet haben Papierkorb des QQ-Postfachs Eine E-Mail
3. Kombiniert mit Swoole, um asynchronen Massenversand zu erreichen 3.1 Installation von Swoole
Die detaillierten Schritte für die Installation der Swoole-Erweiterung finden Sie auf der offiziellen Website Website, daher werde ich nicht auf Details eingehen.
Nach der Installation von Swoole wird empfohlen, Swoole-Code-Eingabeaufforderungen zu Ihrer IDE hinzuzufügen und das Portal für IDE-Eingabeaufforderungen Swoole zu konfigurieren Code
3.2 zur Implementierung des asynchronen Massenversands
Wir implementieren zuerst den asynchronen Server:
/** * 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(); }
Auf der Serverseite haben wir eine 20er-Schleife verwendet, um den Massenversand zu simulieren. Ändern Sie ihn einfach in eine andere E-Mail-Adresse.
Als nächstes implementieren wir den 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 Öffnen Sie den Server
Hier muss die CLI-Methode verwendet werden . Wir gehen in das Stammverzeichnis des Projekts.
Ausführen
netstat -apn | grep 8082
Überwachen Sie zunächst, ob Port 8082 belegt ist, wenn ja
kill -9 PID(进程号)
Prozess beenden
Dann führen wir
php public/index.php index/index/syncSend
Die Funktion dieses Befehls besteht darin, den CLI-Modus zu verwenden Versetzen Sie unseren 8082-Port in den Abhörstatus. Und lassen Sie dieses Terminal aktiv, damit wir die gesendeten Ergebnisse sehen können.
Dann können wir über CLI oder Browserzugriff auf unseren Client zugreifen
php public/index.php index/index/index
Wenn wir es einmal ausführen. Zu diesem Zeitpunkt können wir das sehen Folgender Bildschirm auf dem Serverterminal:
Dies bedeutet, dass wir die Gruppe normal gesendet haben.
Als nächstes testen wir asynchron, da der 163-Server die IP erkennt. Wenn das Senden zu einem bestimmten Zeitpunkt nicht häufig erfolgt, schlägt das Senden fehl. Verwenden Sie daher beim Testen die Methode von Ausführen des Clients 4 Mal hintereinander
Das Folgende ist das Ergebnis der Ausführung:
Anhand der Sendesequenz in der Abbildung können wir leicht beurteilen, dass wir das asynchrone Senden implementiert haben.
Die gerade gesendete E-Mail ist auch im Postfach angekommen.
4. Postscript~
swoole ist eine Erweiterung, mit der Sie vertraut sein und die Sie kompetent verwenden möchten, die jedoch begrenzt ist Unzureichende Kenntnisse in der Netzwerkprogrammierung, daher müssen Sie noch mehr testen und lernen. Wenn es Mängel in der Demo gibt, weisen Sie bitte darauf hin, QAQ
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
So generieren Sie automatisch Module und Verzeichnisse in Thinkphp5.0
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie thinkphp5 und swoole asynchrones Massenmailing über SMTP implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!