宝哥软件园

thinkphp5 swoole实现异步群发(SMTP模式)的详细说明

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

本文介绍thinkphp5 swoole实现异步群发(SMTP模式)并分享给大家,如下:

1.环境描述

阿里巴巴云CentOS 7 ThinkPHP 5 . 0 . 11 SWOOLE 2 . 0 . 82,tp实现邮件发送

在项目下建立以下文档目录:

其中,SendMail.php是我们实际上用来发送邮件的文件。以下是主要代码:

命名空间app library utils mail使用app library utils mail PhpMailer;使用app library utils mail Smtp使用思考日志;错误报告(E _ STRICT);date_default_timezone_set('亚洲/上海');class SendMail { static function post mail($ 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。主机’);$mail-Port=config('mail。端口');$mail-Username=config('mail。用户名');$mail-Password=config('mail。密码');$mail-SetFrom(配置(' mail。发件人'),配置('邮件。名称');$ mail-Subject=$ Subject;$ mail-MSghtml($ body);$ address=$ to$ mail-AddAddress($ address ' ');if(!$ mail-Send()){ log : write(' Send to ')。$to。错误信息: '。$ mail-ErrorInfo);返回false} else { return true}}} config配置项,我们把它放在config.php文件的项目下,具体配置内容如下:

//邮箱设置' mail'=['charset'=' utf-8 ',' smtpdebug'=0,//启用SMTP调试功能0关闭' SMTPAuth'=true,//启用SMTP身份验证功能' SMTPSecure'='ssl ',//安全协议' host'=' smtp.163. //SMTP服务器' Port'=465,//SMTP服务器端口号' username '=' * * * * * * * * * * * ',//SMTP服务器用户名' password '=' * * * * * * * * * * * * * ',//SMTP服务器密码'来自//发件人邮箱' Name'='blue ',//发件人邮箱]2.1这里我们只实现了smtp协议发送的演示,所以封装级别不是很全面和灵活。图中的另外两个文件(Phpmailer和Smtp.php)是Phpmailer邮件发送类的核心文件,提取它们是为了简化调用。有关详细用法和参数设置,请参考gayhub的说明phpmailer。

2.2注意事项

在这一步中,我们需要注意以下几点:1。您设置的电子邮件发送帐户是否启用了SMTP,并找到相应的安全协议和端口号。2.当前服务器是否支持SMTP服务,往往会受到一些套接字功能的影响。当出现问题时,我们应该将SMTPdebug参数设置为1,然后根据debug信息仔细调试。3.有些寄出的邮件会被扔进垃圾箱,所以要注意检查。

2.3通话

建立以下文件目录结构:

调用Index.php发送邮件的方法,具体代码如下

公共函数sendMail(){ if(sendMail : post mail('[email protected]',' test ',' 123 '){ echo ' send success ';}else{ echo“发送失败”;} }2.4通话结果

我们可以在QQ邮箱的垃圾箱里找到一封刚发的邮件

3.结合swoole实现异步群发3.1安装swoole

swoole扩展安装的详细步骤都在官网上,就不赘述了。swoole文件传输门

安装swoole后,建议在IDE中添加swoole代码提示,并配置IDE提示swoole代码的入口

3.2异步组发送的实现

让我们首先实现异步服务器:

/* * * description : server */public function sync send(){ $ server=new swole _ server(' 0 . 0 . 0 ',8082);$ server-set(数组(' task _ worker _ num '=4));$server-on(' receive '),函数($ serv,$fd,$from_id,$ data){ $ task _ id=$ server-task($ data);Echo“开始发布异步任务id=$ task _ id n”;});$ server-on(' task ',函数($ serv,$ task _ id,$ from _ id,$ data) {echo '接收异步任务[id=$task_id]'。PHP _ EOLfor($ I=0;$ i20$ I){ if(sendmail : post mail('[email protected]',' test ',$data)){ echo 'send '。$i“成功”。 n ';} else { echo ' send。$i“失败”。 n ';} } $ server-finish(“”);});$ serv-on ('finish ',函数($ serv,$ task _ id,$ data) {echo '异步任务[id=$task_id]完成'。PHP _ EOL});$ server-start();}在服务器端,我们使用了一个20的循环来模拟批量发送,并且实际上将其更改为不同的电子邮件地址。

现在我们实现了客户端

/* * * description : client */public function index(){ $ client=new swole _ client(swole _ sock _ TCP,swole _ sock _ sync);$ ret=$ client-connect(' 127 . 0 . 0 . 1 ',8082);if(空($ret)){ echo '错误!连接到swoole_server失败';} else { $ client-send(' blue ');//这只是发送内容的简单实现} }3.3打开服务器

这里,我们必须使用CLI,我们输入项目的根目录。

执行

Netstat -apn | grep 8082首先监控8082端口是否被占用,如果被占用,

Kill -9 PID(进程号)杀死进程

然后我们执行

phpppublic/index . phpindex/index/sync send命令的功能是使用cli模式使我们的8082端口处于监听状态。并保持终端处于活动状态,方便我们查看发送的结果。

然后我们可以使用命令行界面或浏览器访问来访问我们的客户端

phpppublic/index。phpindex/index/index当我们在客户端执行一次时,我们可以在服务器端终端的屏幕上看到下面的图片:

这意味着我们已经正常发送了质量。

接下来我们就来测试异步,因为163服务器会检测IP,如果在某个时间不频繁发送,就会发送失败,所以我们在测试的时候,采用连续执行客户端四次的方法

以下是执行的结果:

从图中的发送顺序,我们很容易判断出我们已经实现了异步发送。

刚发的邮件也在邮箱里收到了。

4.后记~

Swoole是你想熟悉并熟练使用的一个扩展,但仅限于网络编程知识的缺乏,还需要多测试多学习。演示中有一些缺点,也请指出QAQ

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+