好久沒有寫部落格了,前一段時間想做淘寶客,所以就想到了郵件群發一些垃圾郵件,雖然效果不怎麼滴,但是對郵件群發有了一定的認識,對php郵件操作有一定的認知。

原理:

第一申請大量的郵箱帳號 騰訊的 126的 163的 新浪的 雅虎的 谷歌的 等等提供smtp服務的

第二:收集你要傳送郵件的郵件列表

第三:遍歷郵件列表,每一個郵件傳送郵件

第四:用linux下定時指令碼後臺執行 我跑了兩天 哈哈 ,因為為了儘可能的保證每一個都傳送成功

 

原理是很簡單,但是其中還是遇到很多的問題。

第一:郵件失敗的問題,我這裡採用兩個方式解決,第一把大量的那些郵箱帳號依次去傳送,直到成功。然後每次傳送500封郵件 後把傳送郵箱列表隨機打散(避免一個持續失敗)。

我用的是phpmailer

多的不多說了上程式碼了。phpmailer 大家自己搜尋下載吧

 

入口指令碼:就是linux 執行的 mail_001.php

 

  1. <?php  
  2. define(`ROOT_PATH`,dirname(__FILE__)); 
  3. require_once `library/senderApi.php`//傳送郵件介面 
  4. require_once `config/senderListConf.php`;   //傳送郵件帳號列表 
  5. //讀取文字 郵件地址  
  6. shuffle($senderListConf); 
  7. $filename = "data/email.txt"
  8. $fp = fopen($filename,"r"); 
  9. $contents = fread($fp,filesize($filename)); 
  10. $list_email=explode(" ",$contents);           
  11. $len=count($list_email); 
  12. fclose($fp); 
  13. //郵件內容為網頁上的內容 
  14. $htmlContent = file_get_contents(`http://taobao.1080www.com`); 
  15. // 引數說明(傳送到, 郵件主題, 郵件內容, 附加資訊, 使用者名稱) 
  16. foreach($list_email as $key=>$value
  17.     $value = trim($value); 
  18.     $rs=explode("@",$value); 
  19.     $user_name = $rs[`0`]; 
  20.     smtp_mail($value`秋季補水化妝品_秋季護膚皮膚保養_秋天皮膚乾燥怎麼辦-小常識`,$htmlContent`http://taobao.1080www.com/`$user_name,$senderListConf,0); 
  21.     sleep(3); 
  22.     if($key%200 == 0 && $key>0) 
  23.     { 
  24.         shuffle($senderListConf); //每200次 吧傳送郵件順序打亂一次 
  25.     } 
  26. die(`SendingOver.................`." "); 
  27. ?>  

封裝phpmailer senderApi.php

 

  1. <?php  
  2. // 請求 PHPmailer類 檔案 
  3. error_reporting(E_ERROR); 
  4. require_once("phpmailer/phpmailer.class.php"); 
  5. // 寫入傳送結果函式 
  6. function info_write($filename,$info_log
  7.     $info.= $info_log
  8.     $info.=" "
  9.     $fp = fopen ($filename,`a`); 
  10.     fwrite($fp,$info); 
  11.     fclose($fp); 
  12. //傳送Email函式 
  13. function smtp_mail ( $sendto_email$subject$body$extra_hdrs$user_name,$senderListConf,$sender=0) {  
  14.     $batch_no = date("Y_m_d_H"); 
  15.     $mail = new PHPMailer();   
  16.     $mail->IsSMTP(); 
  17.     $sender_info = $senderListConf[$sender]; 
  18.     if(!$sender_info`die 傳送帳號出錯了..............`;   // send via SMTP   
  19.     $mail->Host = $sender_info[`Host`];                       // SMTP servers   
  20.     $mail->SMTPAuth = true;                             // turn on SMTP authentication   
  21.     $mail->Username = $sender_info[`Username`];                          // SMTP username     注意:普通郵件認證不需要加 @域名  
  22.     $mail->Password = $sender_info[`Password`];                         // SMTP password   
  23.     $mail->From = $sender_info[`Username`];                      // 發件人郵箱  
  24.     $mail->FromName = "淘寶推薦---TaoBao";                 //   發件人 ,比如 中國資金管理網 
  25.     $mail->CharSet = "UTF-8";                          // 這裡指定字符集!  
  26.     $mail->Encoding = "base64";   
  27.     $mail->AddAddress($sendto_email,$user_name);        // 收件人郵箱和姓名  
  28.     $mail->AddReplyTo("ken@cscsws.com","淘寶推薦");   
  29.      
  30.     //$mail->WordWrap = 50; // set word wrap   
  31.     //$mail->AddAttachment("/var/tmp/file.tar.gz");                                                    // p_w_upload  附件1 
  32.     //$mail->AddAttachment("/home/www/p_w_picpaths/zhuanti/qiujibushui/qiujibushui_attache.jpg", "new.jpg");                                         //附件2 
  33.     $mail->IsHTML(true);                               // send as HTML   
  34.     $mail->Subject = $subject;                         
  35.  
  36.     // 郵件內容      可以直接傳送html檔案 
  37.     $mail->Body = $body
  38.     $mail->AltBody ="text/html";   
  39.     if($mail->Send())   
  40.     {   
  41.        info_write(ROOT_PATH.`/log/`.$batch_no."ok.txt","$user_name 傳送成功"); 
  42.     }   
  43.     else 
  44.     {  
  45.        info_write(ROOT_PATH.`/log/`.$batch_no."falied.txt","$user_name 失敗,傳送賬號".$sender_info[`Username`].",錯誤資訊$mail->ErrorInfo"); 
  46.        if($senderListConf[$sender+1]) 
  47.        { 
  48.            $sender = smtp_mail ( $sendto_email$subject$body$extra_hdrs$user_name,$senderListConf,($sender+1)); 
  49.        } 
  50.     } 
  51.     return $sender;  
  52. }  

傳送郵件列表示例 senderListConf.php

 

  1. <?php 
  2. $senderListConf = array
  3.  
  4.         //搜狐郵箱 
  5.         array(`Host`=>`smtp.sohu.com`,`Username`=>`youemail@sohu.com`,`Password`=>`yourpassword`), 
  6.         //雅虎郵箱 
  7.         array(`Host`=>`smtp.mail.yahoo.com`,`Username`=>`youemail@yahoo.cn`,`Password`=>`yourpassword`), 
  8.         //163郵箱 
  9.         array(`Host`=>`smtp.163.com`,`Username`=>`youemail@163.com`,`Password`=>`yourpassword`), 
  10.         //126郵箱 
  11.         array(`Host`=>`smtp.126.com`,`Username`=>`youemail@126.com`,`Password`=>`yourpassword`), 
  12.         //qq郵箱 
  13.         array(`Host`=>`smtp.qq.com`,`Username`=>`youemail@qq.com`,`Password`=>`yourpassword`), 
  14.         //谷歌郵箱 
  15.         array(`Host`=>`smtp.gmail.com`,`Username`=>`youemail@gmail.com`,`Password`=>`yourpassword`), 
  16.         //139郵箱 
  17.         array(`Host`=>`smtp.139.com`,`Username`=>`youemail@139.com`,`Password`=>`yourpassword`), 
  18.         //qq郵箱 
  19.         array(`Host`=>`smtp.qq.com`,`Username`=>`youemail@qq.com`,`Password`=>`(yourpassword`), 
  20. ); 

檔案的程式碼我上傳附件了,但是裡面的傳送郵箱我改了,如果有用的自行申請。

現在php傳送郵件的網上的好多版本,找到適用你的那個就行了。