当法式履行群发邮箱的时分,会显现等待法式反应时光太长 这对于用户体验来说是很欠好的,用户大多会在法式没有履行完就封锁法式,如许发送邮件也会中止,以是我们的处理思绪应该是用异步去履行发邮件的过程。
一、创立一个毗连用户支配页面和履行发件的方式:
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 => '***@qq.com',
1 => '***@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').';');
/*记实一下日记观点式是否是履行发件*/
}
用户运转效果(以上是测试)
日记检察
测试的两个邮箱都已收到邮件