... swoole已经升级到4了,主要的特性是更好的支持协程,easyswoole也为了更好支持协程推出了es3。我本地环境是php7.2.9 centos7

在github下载最新的3.0的demo。地址为:https://github.com/easy-swoole/demo

这篇文章主要介绍了详解thinkphp5+swoole实现异步邮件群发(SMTP方式),具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文介绍了thinkphp5+swoole实现异步邮件群发(SMTP方式),分享给大家,具体如下:

1、环境说明阿里云centos7

thinkphp5.0.11

swoole2.0.8

2、tp实现邮件发送

在项目下建立如下的文件目录:

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

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;

}

}

}

里面的config配置项,我们放在项目底下的config.php文件中,具体配置内容如下:

//邮箱设置

'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这里我们只是实现了smtp协议发送的demo,所以在封装的层面上没有做到很全面,不是很灵活。图中其他两个文件(PhpMailer.php和Smtp.php)是Phpmailer邮件发送类的核心文件,为了简化调用,抽取了出来,详细的用法和参数设置,可以参考gayhub的使用说明phpmailer

2.2 注意点

在此步骤中,我们需要注意几点:1是你设置的邮件发送的账号是否已经开启SMTP并且找对对应的安全协议和端口号。2、当前服务器是否支持SMTP服务,这边很多时候会受一些socket函数的影响,遇到问题的时候,我们应该把SMTPDebug参数设置为1,然后根据debug信息去细心调试。3、发出的邮件有些会被放入垃圾箱,注意查收。

2.3 调用

建立如下的文件目录结构:

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

public function sendMail(){

if(SendMail::postmail('937069176@qq.com','test','123')){

echo 'send success';

}else{

echo 'send fail';

}

}

2.4 调用结果

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

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

swoole扩展安装的详细步骤官网上面都有,不再赘述,swoole文档传送门

安装完swoole之后,建议为自己的IDE加上swoole的代码提示,配置IDE提示swoole代码的传送门

3.2实现异步群发

我们先实现异步的服务端:

/**

* 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();

}

在服务端,我们用了一个20的loop来模拟了群发,实际换成不同的email地址就可。

下面我们实现客户端

/**

* 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开启服务端

这里必须要用CLI方式,我们进入项目的根目录。

执行

netstat -apn | grep 8082

先监测一下8082端口是否被占用,如果占用则

kill -9 PID(进程号)

杀死进程

然后我们执行

php public/index.php index/index/syncSend

这条命令的作用是用cli模式来使我们的8082端口处于监听状态。且保持这个终端处于活跃状态,这样方便我们查看发送的结果。

接着我们可以用CLI或者浏览器访问的方式来访问我们的客户端

php public/index.php index/index/index

当我们执行一次的时候客户端的时候,我们可以在服务端的终端看到屏幕上面出现如下的画面:

说明我们已经正常群发了。

下面,我们就来测试异步,因为163服务器会对IP进行检测,如果在某个时间发送也别频繁的话,会出现发送失败的情况,所以我们测试的时候,采用连续执行4次客户端的方式

下面是执行的结果:

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

邮箱里面也接收到了刚刚发送的邮件。

4、后记~

swoole是一种想要熟悉和熟练使用的扩展,但是限于网络编程知识的不足,所以还是要多多测试和学习,demo中有不足的地方,还请指出QAQ

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注点凡PHP技术博客!

相关推荐:

Thinkphp5.0自动生成模块以及目录的方法

thinkphp多表查询两表有重复相同字段的完美解决方法

利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法

easyswoole和mixphp_关于thinkphp5和swoole通过SMTP方式实现异步邮件群发的详解 - easyswoole...相关推荐

  1. thinkphp5 异步调用方法_详解thinkphp5+swoole实现异步邮件群发(SMTP方式)

    本文介绍了thinkphp5+swoole实现异步邮件群发(SMTP方式),分享给大家,具体如下: 1.环境说明 阿里云centos7 thinkphp5.0.11 swoole2.0.8 2.tp实 ...

  2. Thinkphp5 集成 Swoole

    Swoole简介 Swoole是一个面向生产环境的 PHP 异步网络通信引擎.使 PHP 开发人员可以编写高性能的异步并发 TCP.UDP.Unix Socket.HTTP,WebSocket 服务. ...

  3. easyswoole默认访问html,详解PHP框架EasySwoole

    安装 使用 Composer 安装 composer require easyswoole/easyswoole=3.xphp vendor/bin/easyswoole install 启动框架 p ...

  4. Swoole基础知识,安装,websocket应用及各种问题详解

    1. swoole基础-概述 Swoole基础课程正式推出!零基础开始,让你循环渐进的掌握swoole. 传统的phper们大部分都是用于开发web应用程序,并且大部分都是在用类似yii\larave ...

  5. Swoole WebSocket服务使用Task任务详解 (面向对象方法)

    Swoole WebSocket服务使用Task任务详解 (面向对象方法) 作者: 绝爱七八丶 博客: https://blog.csdn.net/qq_40193451 日期: 2018.8.24 ...

  6. php接入qq登陆,thinkphp5中接入QQ登录方法详解

    Thinkphp5中接入QQ登录操作,方法详解: 1.下载PHP SDK <点击进入下载页> 2.下载后的SDK解压,并运行install下的index.php 3.填写appid.app ...

  7. php think migrate,thinkphp5 migrate数据库迁移使用详解

    这次给大家带来thinkphp5 migrate数据库迁移使用详解,thinkphp5 migrate数据库迁移使用的注意事项有哪些,下面就是实战案例,一起来看一下. tp5相对与tp3.2有很大的不 ...

  8. easyswoole数据库连接池_如何在 Swoole 中优雅的实现 MySQL 连接池

    如何在 Swoole 中优雅的实现 MySQL 连接池 一.为什么需要连接池 ? 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开, 并且各个请求的连接可以相互复用, 减少重复连接数据库带来 ...

  9. php swoole实现定时任务,Swoole实现任务定时自动化调度详解,来学习下

    问题描述 这几天做银行对帐接口时,踩了一个坑,具体需求大致描述一下. 银行每天凌晨后,会开始准备昨天的交易流水数据,需要我们这边请求拿到. 因为他们给的是一个base64加密的zip压缩流,解开以后可 ...

最新文章

  1. 暑假第六周总结(2018.8.13-8.19)
  2. 关于NandFlash在实际产品使用上的一些经验
  3. 正则表达式的简单理解
  4. 【原创】分布式之大话CAP
  5. Eight Machine Learning JavaScript Frameworks to Explore
  6. Django Form -- 字段的用法扩展
  7. string类的写时拷贝
  8. DeePMD-kit的conda安装方法以及速度慢的解决方案
  9. edxp显示未安装_智能水表安装使用注意事项
  10. 【转】qt触摸屏隐藏鼠标指针
  11. DiscuzNT改造-远程图片自动采集-DNT2.5(自动采集、源码下载)
  12. 搜狐Linux运维工程师面试真题曝光
  13. java 类省_2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解
  14. 用友t 的服务器找不到系统管理,用友T+找不到账套了怎么办
  15. 【乐理入门】——音符与五线谱(1)
  16. docker镜像的获取删除和查看镜像信息历史记录清理残余镜像
  17. Qt5.12.6 + VS2019添加图片资源文件
  18. v-show会预先渲染_预先进行Big Design的利弊-我该怎么做
  19. 从零开始学SEO的基础概念
  20. LUA语言教程 [转]

热门文章

  1. 【Android】中微信抢红包助手的实现(代码整理)
  2. 暴力破解MD5密码[单线程]
  3. 【期权、期货及其衍生产品】学习笔记1(期权、远期)
  4. Linux操作系统实践期中考总结(选择题)
  5. 中国古代传说中龙生有九子,都不像龙,各有所好。
  6. 高端大气上档次Ergotron Neo-Flex+MBP Retina的组合~
  7. 个人计算机ppt,计算机基础 个人PPT
  8. 我们文本分析了贾跃亭2017年全部公开信,发现他近期喜欢用“责任”“致歉”...
  9. 《新概念》英语的学习方法
  10. delphi源码三层框架【框架简介】