當(dāng)程序執(zhí)行群發(fā)郵箱的時(shí)候,會(huì)出現(xiàn)等待程序反饋時(shí)間太長(zhǎng) 這對(duì)于用戶(hù)體驗(yàn)來(lái)說(shuō)是很不好的,用戶(hù)大多會(huì)在程序沒(méi)有執(zhí)行完就關(guān)閉程序,這樣發(fā)送郵件也會(huì)中斷,所以我們的解決思路應(yīng)該是用異步去執(zhí)行發(fā)郵件的過(guò)程。
一、創(chuàng)建一個(gè)連接用戶(hù)操作頁(yè)面和執(zhí)行發(fā)件的方法:
private function connect($host, $path, $param = array()){
$query = isset($param) ? http_build_query($param) : '';
$port = 80;
$errno = 0;
$errstr = 'error';
$timeout = 30; //連接超時(shí)時(shí)間(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);//響應(yīng)超時(shí)時(shí)間(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;
}
二、用戶(hù)操作方法 傳遞參數(shù)頁(yè)面
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);
/*調(diào)用方法*/
echo '發(fā)送成功'; /*提示用戶(hù)發(fā)送成功*/
}
三、發(fā)送郵件
public function emails(){
set_time_limit(0);/*設(shè)置程序運(yùn)行時(shí)間沒(méi)有限制防止運(yùn)行超時(shí)*/
ignore_user_abort(true);//設(shè)置與客戶(hù)機(jī)斷開(kāi)是否會(huì)終止執(zhí)行
$data=I('post.');
$email='';
$sendTitle="郵件標(biāo)題";
$sendinfo='郵件內(nèi)容';
$send=array(
'title'=>$sendTitle,
'detail'=>$sendinfo,
);
$mail= new Service\SendemailService();
foreach ($data as $k => $v) {
$email.=$v.'|';
$toMail=$v;
$info=$mail->sendEmail($send,$toMail);
/*執(zhí)行發(fā)送郵箱*/
}
$log_name = "Public/notify_url.log"; //log文件路徑
$this>log_result($log_name,$email.date(time(),'H:i:s').';');
/*記錄一下日志看程序是否執(zhí)行發(fā)件*/
}
用戶(hù)運(yùn)行結(jié)果(以上是測(cè)試)
日志查看
測(cè)試的兩個(gè)郵箱都已經(jīng)收到郵件
如沒(méi)特殊注明,文章均為方維網(wǎng)絡(luò)原創(chuàng),轉(zhuǎn)載請(qǐng)注明來(lái)自http://pdcharm.com/news/5623.html