需求:发送大约5万封会员邮件(非垃圾邮件)通知。
代码如下:

$From = "[email protected]";
$Bcc = "[email protected][email protected][email protected][email protected], ...";
$Subject = "标题";
$Content = "bla bla bla";
$fp = popen("/usr/sbin/sendmail -t","w");  
fwrite($fp, "From:   ".$From."\n"); //往管道写数据  
        fwrite($fp, "Return-Path: ".$From."\n");
fwrite($fp, "Bcc:   ".$Bcc."\n");
        fwrite($fp, "Subject:   ".$Subject."\n");
        fwrite($fp, "Mime-Version:   1.0\n");
        fwrite($fp, "Content-Type:   text/html;   charset=\"gb2312\"\n\n");  
        fwrite($fp, $Content."\n");  
        pclose($fp);   //关闭管道 注意代码里的 $Bcc 里对应的密送邮件列表,我试过写50个没问题。
我想知道能不能把5万个邮件地址写在里面,可以不可以啊?
高分相送,请高手们说说是否可行,会不会超过负荷导致失败以及别的什么问题。我想这段代码没有发送失败的记录啊,这个不知道怎么入手。
莫非得查sendmail的log ?或者有别的群发邮件的好方法也不吝指教。谢谢~顶贴也给分!

解决方案 »

  1.   

    抄送邮件地址个数,应该与在的操作系统处理能力有关系.
    比如说你的bcc, 在上述代码中是以字符串形式存在的, 这还受PHP内存的限制.
    具体多少你自己测试.另外,建议可以将用户划分成不同的邮件组,然后bcc给邮件组,这样可能会更好些.
      

  2.   

    比如说你的bcc, 在上述代码中是以字符串形式存在的, 这还受PHP内存的限制.
    具体多少你自己测试. 
    这个怎么试啊,拿会员的邮件做试验会被砍死哟什么叫用户划分成不同的邮件组?这个具体怎么弄?不太明白~
      

  3.   

    1 对于多少的测试,可以拿自己的邮件测试,重复1W次.
      不管是字符串,还是数组,都是要占系统内存的,至于比例,这个得自己考证.
    2 至于邮件组,类似于这种的.
      [email protected], 将公司所有员工都加入到这个邮件组,其实你只要将邮件发送到这个地址,所有员工就能收到了.
    这个需要建立邮件服务器. 这样的话,你可以将用户划分成不同的组,然后bcc给不同的组就行了.
      

  4.   

    smtp服务器对bcc数量是有限制的。
    具体限制数量跟服务器设定有关。5万肯定是不行的,
    循环发n遍达到5万不久的了。
      

  5.   


    1. 试过了,拿自己的邮件重复1w次 恐怕不行 至少发给gmail的都当成一份。2. 基本解决了~ 不通过浏览器执行了 直接SSH进机器,然后写for 循环来发送...3. 由于发送量太多,会导致脚本执行时间过长。还是希望高人能说写如果在浏览器端执行循环发送怎样才能搞定,
      

  6.   

    没办法,有些人要求我们提供这些支持,不是所有人都能登进机器用 shell发的。。所以我继续求~
      

  7.   

    用ajax秩做个等待的进度条。
      

  8.   

    1. php,那就 set_time_limit(0) 一直执行就得了2. crontab,一段时间发送几千封