This article mainly introduces the detailed explanation of thinkphp5+swoole to implement asynchronous mass mailing (SMTP method). It has certain reference value. Interested friends can refer to it.
This article introduces the implementation of thinkphp5+swoole. Asynchronous mass mailing (SMTP method), share with everyone, the details are as follows:
1. Environment description
Alibaba Cloud centos7
thinkphp5.0.11
swoole2.0.8
##2. tp realizes email sending
Create the following file directory under the project: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; } } }
//邮箱设置 '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.2 Notes
In this step, we need to pay attention to a few points: 1. Whether the account you set to send the email has opened SMTP and find the corresponding security protocol and port Number. 2. Whether the current server supports SMTP service, which is often affected by some socket functions. When encountering problems, we should set the SMTPDebug parameter to 1, and then debug carefully based on the debug information. 3. Some emails sent will be put into the trash, please check them carefully. 2.3 Call to establish the following file directory structure: Call the method of sending emails in Index.php, the specific code is as followspublic function sendMail(){ if(SendMail::postmail('937069176@qq.com','test','123')){ echo 'send success'; }else{ echo 'send fail'; } }
2.4 Call result
We can find the email we just sent in the trash of QQ mailbox Email3. Combined with swoole to achieve asynchronous mass sending 3.1 Installation of swoole
The detailed steps for swoole extension installation are available on the official website, so I won’t go into details. The swoole document portal3.2 Implement asynchronous mass sending
We first implement the asynchronous 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(); }
/** * 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');//这里只是简单的实现了发送的内容 } }
netstat -apn | grep 8082
kill -9 PID(进程号)
php public/index.php index/index/syncSend
php public/index.php index/index/index
4. Postscript~
swoole is an extension that you want to be familiar with and use proficiently, but it is limited to network programming knowledge. Insufficient, so you still need to test and learn more. If there are any deficiencies in the demo, please point out the QAQThe above is the detailed content of Example of using thinkphp5 and swoole to implement asynchronous mass mailing using SMTP. For more information, please follow other related articles on the PHP Chinese website!