PHP邮件群发机实现代码

5年以前  |  阅读数:928 次  |  编程语言:PHP 

原理:
第一:申请大量的邮箱帐号 腾讯的 126的 163的 新浪的 雅虎的 谷歌的 等等提供smtp服务的
第二:收集你要发送邮件的邮件列表
第三:遍历邮件列表,每一个邮件发送邮件
第四:用linux下定时脚本后台运行 我跑了两天 哈哈 ,因为为了尽可能的保证每一个都发送成功

原理是很简单,但是其中还是遇到很多的问题。

第一:邮件失败的问题,我这里采用两个方式解决,第一把大量的那些邮箱帐号依次去发送,直到成功。然后每次发送500封邮件 后把发送邮箱列表随机打散(避免一个持续失败)。
我用的是phpmailer
多的不多说了上代码了。phpmailer 大家自己搜索下载吧

入口脚本:就是linux 执行的 mail_001.php


    <?php 
    define('ROOT_PATH',dirname(__FILE__)); 
    require_once 'library/senderApi.php'; //发送邮件接口 
    require_once 'config/senderListConf.php'; //发送邮件帐号列表 
    //读取文本 邮件地址 
    shuffle($senderListConf); 
    $filename = "data/email.txt"; 
    $fp = fopen($filename,"r"); 
    $contents = fread($fp,filesize($filename)); 
    $list_email=explode("\r\n",$contents);   
    $len=count($list_email); 
    fclose($fp); 
    //邮件内容为网页上的内容 
    $htmlContent = file_get_contents('http://taobao.1080www.com'); 
    // 参数说明(发送到, 邮件主题, 邮件内容, 附加信息, 用户名) 
    foreach($list_email as $key=>$value) 
    { 
     $value = trim($value); 
     $rs=explode("@",$value); 
     $user_name = $rs['0']; 
     smtp_mail($value, '秋季补水化妆品_秋季护肤皮肤保养_秋天皮肤干燥怎么办-小常识',$htmlContent, 'http://taobao.1080www.com/', $user_name,$senderListConf,0); 
     sleep(3); 
     if($key%200 == 0 && $key>0) 
     { 
      shuffle($senderListConf); //每200次 吧发送邮件顺序打乱一次 
     } 
    } 
    die('SendingOver.................'."\r\n"); 
    ?>

封装phpmailer senderApi.php


    <?php 
    // 请求 PHPmailer类 文件 
    error_reporting(E_ERROR); 
    require_once("phpmailer/phpmailer.class.php"); 
    // 写入发送结果函数 
    function info_write($filename,$info_log) 
    { 
     $info.= $info_log; 
     $info.="\r\n"; 
     $fp = fopen ($filename,'a'); 
     fwrite($fp,$info); 
     fclose($fp); 
    } 
    //发送Email函数 
    function smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name,$senderListConf,$sender=0) { 
     $batch_no = date("Y_m_d_H"); 
     $mail = new PHPMailer(); 
     $mail->IsSMTP(); 
     $sender_info = $senderListConf[$sender]; 
     if(!$sender_info) 'die 发送帐号出错了..............'; // send via SMTP 
     $mail->Host = $sender_info['Host'];      // SMTP servers 
     $mail->SMTPAuth = true;        // turn on SMTP authentication 
     $mail->Username = $sender_info['Username'];       // SMTP username  注意:普通邮件认证不需要加 @域名 
     $mail->Password = $sender_info['Password'];       // SMTP password 
     $mail->From = $sender_info['Username'];      // 发件人邮箱 
     $mail->FromName = "淘宝推荐---TaoBao";     // 发件人 ,比如 中国资金管理网 
     $mail->CharSet = "UTF-8";       // 这里指定字符集! 
     $mail->Encoding = "base64"; 
     $mail->AddAddress($sendto_email,$user_name);  // 收件人邮箱和姓名 
     $mail->AddReplyTo("ken@cscsws.com","淘宝推荐"); 

     //$mail->WordWrap = 50; // set word wrap 
     //$mail->AddAttachment("/var/tmp/file.tar.gz");             // attachment 附件1 
     //$mail->AddAttachment("/home/www/images/zhuanti/qiujibushui/qiujibushui_attache.jpg", "new.jpg");           //附件2 
     $mail->IsHTML(true);        // send as HTML 
     $mail->Subject = $subject;       

     // 邮件内容  可以直接发送html文件 
     $mail->Body = $body; 
     $mail->AltBody ="text/html"; 
     if($mail->Send()) 
     { 
      info_write(ROOT_PATH.'/log/'.$batch_no."ok.txt","$user_name 发送成功"); 
     } 
     else
     { 
      info_write(ROOT_PATH.'/log/'.$batch_no."falied.txt","$user_name 失败,发送账号".$sender_info['Username'].",错误信息$mail->ErrorInfo"); 
      if($senderListConf[$sender+1]) 
      { 
       $sender = smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name,$senderListConf,($sender+1)); 
      } 
     } 
     return $sender; 
    }

发送邮件列表示例 senderListConf.php


    <?php 
    $senderListConf = array( 

      //搜狐邮箱 
      array('Host'=>'smtp.sohu.com','Username'=>'youemail@sohu.com','Password'=>'yourpassword'), 
      //雅虎邮箱 
      array('Host'=>'smtp.mail.yahoo.com','Username'=>'youemail@yahoo.cn','Password'=>'yourpassword'), 
      //163邮箱 
      array('Host'=>'smtp.163.com','Username'=>'youemail@163.com','Password'=>'yourpassword'), 
      //126邮箱 
      array('Host'=>'smtp.126.com','Username'=>'youemail@126.com','Password'=>'yourpassword'), 
      //qq邮箱 
      array('Host'=>'smtp.qq.com','Username'=>'youemail@qq.com','Password'=>'yourpassword'), 
      //谷歌邮箱 
      array('Host'=>'smtp.gmail.com','Username'=>'youemail@gmail.com','Password'=>'yourpassword'), 
      //139邮箱 
      array('Host'=>'smtp.139.com','Username'=>'youemail@139.com','Password'=>'yourpassword'), 
      //qq邮箱 
      array('Host'=>'smtp.qq.com','Username'=>'youemail@qq.com','Password'=>'(yourpassword'), 
    );
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例