【代码】邮件群发机PHP实现实例分享

来源:互联网 发布:意识与人工智能的关系 编辑:程序博客网 时间:2024/05/17 02:29
原理:
第一申请大量的邮箱帐号 腾讯的 126的 163的 新浪的 雅虎的 谷歌的 等等提供smtp服务的
第二:收集你要发送邮件的邮件列表
第三:遍历邮件列表,每一个邮件发送邮件
第四:用linux下定时脚本后台运行 我跑了两天 哈哈 ,因为为了尽可能的保证每一个都发送成功
 
原理是很简单,但是其中还是遇到很多的问题。
第一:邮件失败的问题,我这里采用两个方式解决,第一把大量的那些邮箱帐号依次去发送,直到成功。然后每次发送500封邮件 后把发送邮箱列表随机打散(避免一个持续失败)。(PS:^_^不错的php开发交流群:304224365,验证:csl,有兴趣的话可以加入进来一起讨论)
我用的是phpmailer
多的不多说了上代码了。phpmailer 大家自己搜索下载吧
 
入口脚本:就是linux 执行的 mail_001.php
 
01<?php 02define('ROOT_PATH',dirname(__FILE__));03require_once 'library/senderApi.php'; //发送邮件接口04require_once 'config/senderListConf.php';   //发送邮件帐号列表05//读取文本 邮件地址 06shuffle($senderListConf);07$filename = "data/email.txt";08$fp = fopen($filename,"r");09$contents = fread($fp,filesize($filename));10$list_email=explode("\r\n",$contents);          11$len=count($list_email);12fclose($fp);13//邮件内容为网页上的内容14$htmlContent = file_get_contents('http://taobao.1080www.com');15// 参数说明(发送到, 邮件主题, 邮件内容, 附加信息, 用户名)16foreach($list_email as $key=>$value)17{18    $value = trim($value);19    $rs=explode("@",$value);20    $user_name = $rs['0'];21    smtp_mail($value, '秋季补水化妆品_秋季护肤皮肤保养_秋天皮肤干燥怎么办-小常识',$htmlContent, 'http://taobao.1080www.com/', $user_name,$senderListConf,0);22    sleep(3);23    if($key%200 == 0 && $key>0)24    {25        shuffle($senderListConf); //每200次 吧发送邮件顺序打乱一次26    }27}28die('SendingOver.................'."\r\n");29?>封装phpmailer senderApi.php 01<?php  02// 请求 PHPmailer类 文件 03error_reporting(E_ERROR); 04require_once("phpmailer/phpmailer.class.php"); 05// 写入发送结果函数 06function info_write($filename,$info_log) 07{ 08    $info.= $info_log; 09    $info.="\r\n"; 10    $fp = fopen ($filename,'a'); 11    fwrite($fp,$info); 12    fclose($fp); 13} 14//发送Email函数 15function smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name,$senderListConf,$sender=0) {  16    $batch_no = date("Y_m_d_H"); 17    $mail = new PHPMailer();   18    $mail->IsSMTP(); 19    $sender_info = $senderListConf[$sender]; 20    if(!$sender_info) 'die 发送帐号出错了..............';   // send via SMTP   21    $mail->Host = $sender_info['Host'];                       // SMTP servers   22    $mail->SMTPAuth = true;                             // turn on SMTP authentication   23    $mail->Username = $sender_info['Username'];                          // SMTP username     注意:普通邮件认证不需要加 @域名  24    $mail->Password = $sender_info['Password'];                         // SMTP password   25    $mail->From = $sender_info['Username'];                      // 发件人邮箱  26    $mail->FromName = "淘宝推荐---TaoBao";                 //   发件人 ,比如 中国资金管理网 27    $mail->CharSet = "UTF-8";                          // 这里指定字符集!  28    $mail->Encoding = "base64";   29    $mail->AddAddress($sendto_email,$user_name);        // 收件人邮箱和姓名  30    $mail->AddReplyTo("ken@cscsws.com","淘宝推荐");   31      32    //$mail->WordWrap = 50; // set word wrap   33    //$mail->AddAttachment("/var/tmp/file.tar.gz");                                                    // attachment  附件1 34    //$mail->AddAttachment("/home/www/images/zhuanti/qiujibushui/qiujibushui_attache.jpg", "new.jpg");                                         //附件2 35    $mail->IsHTML(true);                               // send as HTML   36    $mail->Subject = $subject;                         37  38    // 邮件内容      可以直接发送html文件 39    $mail->Body = $body; 40    $mail->AltBody ="text/html";   41    if($mail->Send())   42    {   43       info_write(ROOT_PATH.'/log/'.$batch_no."ok.txt","$user_name 发送成功"); 44    }   45    else46    {  47       info_write(ROOT_PATH.'/log/'.$batch_no."falied.txt","$user_name 失败,发送账号".$sender_info['Username'].",错误信息$mail->ErrorInfo"); 48       if($senderListConf[$sender+1]) 49       { 50           $sender = smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name,$senderListConf,($sender+1)); 51       } 52    } 53    return $sender;  54}


发送邮件列表示例 senderListConf.php

 
view sourceprint?01ListConf = array( 02  03        //搜狐邮箱 04        array('Host'=>'smtp.sohu.com','Username'=>'youemail@sohu.com','Password'=>'yourpassword'), 05        //雅虎邮箱 06        array('Host'=>'smtp.mail.yahoo.com','Username'=>'youemail@yahoo.cn','Password'=>'yourpassword'), 07        //163邮箱 08        array('Host'=>'smtp.163.com','Username'=>'youemail@163.com','Password'=>'yourpassword'), 09        //126邮箱 10        array('Host'=>'smtp.126.com','Username'=>'youemail@126.com','Password'=>'yourpassword'), 11        //qq邮箱 12        array('Host'=>'smtp.qq.com','Username'=>'youemail@qq.com','Password'=>'yourpassword'), 13        //谷歌邮箱 14        array('Host'=>'smtp.gmail.com','Username'=>'youemail@gmail.com','Password'=>'yourpassword'), 15        //139邮箱 16        array('Host'=>'smtp.139.com','Username'=>'youemail@139.com','Password'=>'yourpassword'), 17        //qq邮箱 18        array('Host'=>'smtp.qq.com','Username'=>'youemail@qq.com','Password'=>'(yourpassword'),

以上是本文关于邮件群发机PHP实现实例分享,希望本文对广大php开发者有所帮助,感谢阅读本文。