`
duobility
  • 浏览: 17510 次
  • 性别: Icon_minigender_1
  • 来自: 钓鱼岛
最近访客 更多访客>>
社区版块
存档分类
最新评论

php 异步发送邮件

阅读更多
需求:
在某系统里,上传完一个产品的补丁文件或发布产品的更新信息,需要给使用该产品的用户(用户数量较多)发送一封电子邮件,发送后提示发送完毕!

常用PHP写法,sendemail.php
//查找出所有使用该产品的用户email地址,假设存放在$email数组中
for($i=0; $i<count($email); $i++){
   sendemail();
}
function sendemail(){
    //发送邮件代码
}



假设该次发送100封邮件。本次操作会出现什么结果呢?

用户体验:用户等待->发送邮件完毕->返回信息(这期间极有可能,脚本执行超时)

本次操作由于需要发送大量的邮件,导致php执行时间过长,用户烦躁的等待。当apache或者nginx等待超过允许执行时间,返回超时错误。这个时候用户不明确本次操作到底成功与否,到底发出了几封邮件。
我们可以看出该代码用户体验极差,并且不能够顺利完成任务。

那应该怎么操作呢?
这里提到一个概念,异步执行
用户体验:用户等待->发送完毕
朋友们就会问,怎么缺少发信环节?
OK,发信环节就在用户提交请求的时候,把发信任务转给了一个单独处理发信的php程序处理了,当用户看见“发送完毕”的时候其实信还没发送完,这个时候,发信程序正在后台努力的工作着,一封一封的向外发送

<?php
$domain="www.example.com";
$url="/system_mail.php";
$par="email=".implode(',',$emailarr)."&........";
$header = "POST $url HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($par) . "\r\n\r\n";
$fp = @fsockopen ($domain, 80, $errno, $errstr, 30);
fputs ($fp, $header . $par);
fclose($fp);

echo ''发送完毕';
?>



分享到:
评论

相关推荐

    PHP使用gearman进行异步的邮件或短信发送操作详解

    主要介绍了PHP使用gearman进行异步的邮件或短信发送操作,总结分析了PHP基于gearman实现异步的邮件或短信发送相关配置、启动与操作注意事项,需要的朋友可以参考下

    zmail:一个简易的邮件发送服务,用于异步化邮件发送

    zmail基于swoole和zphp的一个简易的邮件发送服务,用于异步化邮件发送。运行git clone , 添加到include_path修改 init.d/mail_server里PHP_BIN 和 SERVER_PATH两个配置3)chmod +x init.d/mail_server //你也可以把...

    PHP异步调用socket实现代码

    PHP异步调用实现方式 浏览器和服务器之间只一种面向无连接的HTTP协议进行通讯的,面向无连接的程序的特点是客户端请求服务端,服务端根据请求输出相应的程序,不能保持持久连接。 这样就出现了一个问题,一个客户端...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程42:PHP通过mail()或Socket发邮件 PHP100视频教程43:PHP中MVC学习之ThinkPHP(上) PHP100视频教程44:PHP中MVC学习之ThinkPHP(下) PHP100视频教程45:如何用PHP开发一个完整的网站 PHP100视频...

    Swoole实现异步投递task任务案例详解

    如webim中发广播,发送邮件等,把这些任务丢给task进程之后,worker进程可以继续处理新的数据请求,任务完成后会异步通知worker进程告诉它此任务已经完成。此外利用task还可以实现PHP的数据库连接池,异步队列等。 ...

    PHP扩展Swoole实现实时异步任务队列示例

    把“发邮件”这个操作封装,然后后台异步地执行1万遍。这样的话,用户提交网页后,他所等待的时间只是“把发邮件任务请求推送进队列里”的时间。而我们的后台服务将在用户看不见的地方跑。 在实现“异步队列”这点上...

    lumen-email-microservice:微服务,用于通过Lumen发送电子邮件

    异步发送电子邮件 将电子邮件保存在数据库中 显示保存在数据库中的所有电子邮件 删除保存在数据库中的电子邮件 即将推出的功能 延迟异步发送电子邮件 根据请求发送多个电子邮件 文献资料 请访问以获取更多信息。 ...

    php课程(共100多节)

    42:PHP通过mail()或Socket发邮件 43:PHP中MVC学习之ThinkPHP(上) 44:PHP中MVC学习之ThinkPHP(下) 45:如何用PHP开发一个完整的网站 46:PHPMyAdmin功能操作详解 47:PHP输出CSV和EXCEL两种简单的方法 48:...

    PHP实现异步调用方法研究与分享

    这样就出现了一个问题,一个客户端的相应服务端可能执行1秒也有可能执行1分钟,这样浏览器就会一直处于等待状态,如果程序执行缓慢,用户可能就没耐心关掉了浏览器。...//发送邮件 } ?&gt; 这段代码用户体验极差,也

    yafApi:使用yaf和swoole_http_server,专注于高性能api接口服务,异步任务..

    使用swoole_http_server + yaf 专注于网站api接口,同时能处理异步任务,如异步发送邮件,发送短信验证码等耗时相对长一点的任务 本项目兼容php-fpm模式,不过在异步任务调用处要调整 参照 参照 ##使用说明 //1....

    php实现异步数据调用的方法

    浏览器和服务器之间只有一种面向无连接的HTTP协议进行通讯的,面向无...比如现在有一个场景,给1000个用户发送一封推荐邮件,用户输入或者导入邮件账号了提交服务器执行发送。 &lt;?php $count = count($emailarr);

    yii2-shop:基于Yii2制作的电子商城

    redis队列异步发送邮件 接入 sentry发送异常日志 加入 Kafka异步记录日志(自行开启) 后台RBAC权限控制 接入 支付宝 接入 七牛云,ueditor(图片自动上传七牛云) 接入 QQ互联,可以使用QQ登陆 qq和支付宝都是开发者模式...

    进程:Amp的异步进程调度程序

    处理 该软件包提供了一个可在所有主要平台(包括Windows)上运行的异步流程分派器。 由于Windows管道是文件句柄,并且不允许非阻塞访问,...如果发现任何与安全相关的问题,请发送电子邮件至而不要使用问题跟踪器。

    tsf:腾讯基于协程和Swoole的php服务器框架

    如果您有其他,建议请发送邮件: 与我们联系腾讯服务器框架总览腾讯服务器框架是由腾讯工程师开发的基于协程和Swoole的服务器框架,用于快速部署服务器。产品特点基于PHP。 与C ++相比,该框架的开发和编程效率更高...

    PHP云人才系统 人才网站源码

    (39)、优化邮件、短信批量发送 (40)、优化后台充值(可对用户充值进行加减操作) (41)、优化导航配置(切换伪静态无需更改导航配置) (42)、优化整站体验操作(运用大量异步(AJAX)操作) (43)、优化微简历、微招聘...

    http客户端:基于AmpPHP异步HTTP1.1 + 2客户端

    该软件包为基于PHP提供了一个异步HTTP客户端。... 因此,它不依赖于ext/curl 。... composer require ...安全如果发现任何与安全相关的问题,请发送电子邮件至而不要使用问题跟踪器。执照MIT许可证(MIT)。 请参阅以获取

    php-flame:PHP 协程开发框架 (extensioncoroutineframework)

    FLAME隐式协程调度机制...SMTP 邮件发送;TOML 配置解析;BSON 编解码;SNAPPY 简单压缩解压;额外的哈希 CRC64 / MURMUR2 / XXH64 函数;等等;背景PHP 经常被认为“并发处理能力不足”,一般理由:基于 FastCGI 进程服

    base-php-ddd-workerman-async:使用workerman(异步)的简单API,使用TDD,DDD和用于水平缩放的良好实践

    除了比swoole更快之外,它不需要外部库,但是缺点是它没有协程,因此有必要调用另一个线程(在存储库中有一个使用发送电子邮件的示例)来进行异步服务。 可用端点 /注册(发布) 需要user_name , email , ...

    Laravel_sample_project:这是一个使用 Laravel 4.2 PHP 框架完成的示例项目

    Laravel 示例项目 这是一个使用 Laravel 4.2 PHP 框架完成的示例项目。 这将涵盖框架的基础知识。... 验证电子邮件将发送到提供的电子邮件地址,提示用户激活其帐户。 显示确认页面,10 秒后重定向到登录

Global site tag (gtag.js) - Google Analytics