原理: 第一:申请大量的邮箱帐号 腾讯的 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("
",$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................."."
"); ?>封装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.="
";$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"), );