最土团购网的邮件订阅为什么每次发了几十封就停住呢?而且对方都没收到信!下面是它用来群发邮件的javascript代码:
else if ( 'noticesubscribe' == $action ) {
need_auth('team');
$nid = abs(intval($_GET['nid']));
$now = time();
$interval = abs(intval($INI['mail']['interval']));
$team = Table::Fetch('team', $id);
$partner = Table::Fetch('partner', $team['partner_id']);
$city = Table::Fetch('city', $team['city_id']); $condition = array();
if(abs(intval($team['city_id']))) {
$condition['city_id'] = abs(intval($team['city_id']));
}
$subs = DB::LimitQuery('subscribe', array(
'condition' => $condition,
'order' => 'ORDER BY id ASC',
'offset' => $nid,
'size' => 1,
));
if ( $subs ) {
foreach($subs AS $one) {
$nid++;
try{
ob_start();
mail_subscribe($city, $team, $partner, $one);
ob_get_clean();
}catch(Exception $e){}
$cost = time() - $now;
if ( $cost >= 20 ) {
json("X.misc.noticenext({$id},{$nid});", 'eval');
}
}
$cost = time() - $now;
if ($interval && $cost < $interval) { sleep($interval - $cost); }
json("X.misc.noticenext({$id},{$nid});", 'eval');
} else {
json('订阅邮件发送完毕', 'alert');
}
}X.misc.noticenext = function(tid, nid) {
jQuery('#dialog_subscribe_count_id').html(nid);
return X.get(WEB_ROOT + '/ajax/manage.php?action=noticesubscribe&id='+tid+'&nid='+nid);
};
我邮件smtp发送设置为用网易免费邮箱,密码设置正确,端口:25,SMTP主机:smtp.163.com
发信频率:2秒~5秒
怎么还是不行呢?
请指教!注:后台“邮件营销”发送邮件,倒是可以被接收到!

解决方案 »

  1.   

    http://bbs.zuitu.com/viewthread.php?tid=11426&extra=netaxcess发表于 昨天 20:30 | 只看该作者
    程序执行时间超时造成的。应该做队列.来发邮件.那样才可靠

    micccn发表于 1 秒前 | 只看该作者
    做队列来发邮件,具体在后台怎么操作呢?
    是不是我服务器太慢的问题,还是网易的邮件服务器太慢?
      

  2.   

    js发邮件那么强,跨域问题都给你解决了。
    你贴的明明是php代码
    php这么不间断的利用公用邮件服务器发邮件很容易给扔到垃圾箱或者直接被咔嚓
    你可以借助操作系统做个守护进程,比如linux的crontab ,定时执行个脚本,这个脚本也可以由php写,读取你那个subscribe表,发一封邮件后sleep(1),再发下一封,把成功发送邮件在数据库里记录设置为已经发送,下次忽略发送。
    当然你多注册几个邮件发送帐号,每次发送就随机用一个帐号发送最更好了。
      

  3.   

    php有超时时间的,用php发,容易超时。
    最好是用软件发。