php邮箱群发,php异步群发邮件

原标题:php异步群发邮件

当程序执行群发邮箱的时候,会出现等待程序反馈时间太长 这对于用户体验来说是很不好的,用户大多会在程序没有执行完就关闭程序,这样发送邮件也会中断,所以我们的解决思路应该是用异步去执行发邮件的过程。

一、创建一个连接用户操作页面和执行发件的方法:

private function connect($host, $path, $param = array()){

$query = isset($param) ? http_build_query($param) : '';

$port = 80;

$errno = 0;

$errstr = 'error';

$timeout = 30; //连接超时时间(S)

$fp = @fsockopen($host, $port, $errno, $errstr, $timeout);

if (!$fp) {

return '连接失败';

}

if ($errno || !$fp) {

return $errstr;

}

stream_set_blocking($fp,0); //非阻塞

stream_set_timeout($fp, 1);//响应超时时间(S)

$out = "POST " . $path . " HTTP/1.1\r\n";

$out .= "host:" . $host . "\r\n";

$out .= "content-length:" . strlen($query) . "\r\n";

$out .= "content-type:application/x-www-form-urlencoded\r\n";

$out .= "connection:close\r\n\r\n";

$out .= $query;

$result = @fputs($fp, $out);

@fclose($fp);

return $result;

}

二、用户操作方法 传递参数页面

public function index(){

$param = array(

0 => 'xxx@qq.com',

1 => 'xxx@qq.com',

);

$url='http://'.$_SERVER['HTTP_HOST']..'/Sends/emails';

$info=parse_url($url);

/*dump($info);*/ $res=$this>Connect($info["host"],$info['path'],$param);

/*调用方法*/

echo '发送成功'; /*提示用户发送成功*/

}

三、发送邮件

public function emails(){

set_time_limit(0);/*设置程序运行时间没有限制防止运行超时*/

ignore_user_abort(true);//设置与客户机断开是否会终止执行

$data=I('post.');

$email='';

$sendTitle="邮件标题";

$sendinfo='邮件内容';

$send=array(

'title'=>$sendTitle,

'detail'=>$sendinfo,

);

$mail= new Service\SendemailService();

foreach ($data as $k => $v) {

$email.=$v.'|';

$toMail=$v;

$info=$mail->sendEmail($send,$toMail);

/*执行发送邮箱*/

}

$log_name = "Public/notify_url.log"; //log文件路径

$this>log_result($log_name,$email.date(time(),'H:i:s').';');

/*记录一下日志看程序是否执行发件*/

}

43d49f5511a7abc52a3688e61b538b15.png

用户运行结果(以上是测试)

06e78006700dc5ec257810d5ea648bb7.png

日志查看

90dfd1d9bee49e7ff24e2d6678c0da95.png

b6f4f5c1a636a3934b605dd806f7ac9d.png

测试的两个邮箱都已经收到邮件返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值