2013-04-30 104 views
2

我知道,在第一次看,許多用戶標記爲重複的問題,但在閱讀超過10個問題後,我沒有得到任何滿意的答案,幾乎所有的問題都有答案, 「對此你沒有太多可以做的事情。」,「我不確定」,「沒有確定的投籃技巧」等等,這就是爲什麼我寫這個問題,我認爲這是非常普遍的問題和每個PHP開發人員都面臨的問題它至少有一次,足夠的演講:),現在我的問題是...郵件作爲垃圾郵件發送 - phpmailer,如何避免

我工作的項目管理應用程序,並使用phpmailer發送任何任務時創建任何任務或任何人的意見郵件發送郵件相關的用戶,而不是在行動發生後馬上發送郵件我已經創建了「通知」表w在這裏我實際上保存了所有的郵件數據和一個cron腳本,然後發送所有的郵件,這裏是我的cron腳本的一部分。

$query = "select * from notifications where 1 "; 
    $projects = $obj_basic->get_query_data($query); 

    if(!empty($projects)) 
    { 
     foreach($projects as $data) 
     {  
      $message = html_entity_decode($data['content'], ENT_QUOTES);    
      list($ton, $email) = get_name_email($data['to']);  

      if(!empty($email)) 
      { 
       $query = "select send_notification from users where email='$email' AND send_notification !='1' "; 
       $users = $obj_basic->get_query_data($query); 
       if(!empty($users)) 
       { 
        $deleteQuery = "delete from notifications where id ='".$data['id']."'"; 
        $obj_basic->run_query($deleteQuery, 'DELETE'); 
        continue; 
       } 

       $comment_id = $data['reference_id']; 
       $attribute = $data['attribute']; 
       $mail = new PHPMailer(); 
       list($fromName, $fromEmail) = get_name_email($data['from']);  
       if(!empty($comment_id) && $attribute == 'comment') 
       { 
        $fromEmail = '[email protected]'; 
       } 

       $mail->SetFrom($fromEmail, $fromName); 
       $mail->AddReplyTo($fromEmail, $fromName); 
       $mail->AddAddress($email, $ton); 
       $mail->BouncedTo = $fromEmail; 
       $mail->IsHTML(true);        
       $mail->Subject = $data['subject'];    
       $mail->Body = $message;   
       $MessageID = "<".md5($comment_id.'_'.$email).'@changewebaddress.com>'; 
       $mail->MessageID= $MessageID; 

       if($mail->Send()) {   
        if(!empty($comment_id) && $attribute == 'comment') 
        { 
         $query = "SELECT message_id FROM `project_comments` WHERE `id`='$comment_id'; "; 
         $project_comments = $obj_basic->get_query_data($query, 'SELECT'); 

         if(!empty($project_comments)) 
         { 
          $project_comments[0]['message_id'] = html_entity_decode(trim($project_comments[0]['message_id'], ",")); 
          $query = "UPDATE `project_comments` SET `message_id`=CONCAT_WS(',', '".mysql_escape_string($project_comments[0]['message_id'])."', '".mysql_escape_string(html_entity_decode($MessageID))."') WHERE `id`='$comment_id'; "; 
          $obj_basic->run_query($query, 'UPDATE'); 
         }      
        }     
        $deleteQuery = "delete from notifications where id ='".$data['id']."'"; 
        $obj_basic->run_query($deleteQuery, 'DELETE'); 
       }   
      } 
     } 
    } 

按什麼我已經測試一切看起來不錯,因爲我使用的PHPMailer它集所需的頭還設置「返回路徑:」和「回覆到:」在標題中。

有沒有在這個問題上

+0

在何種意義上是「交付爲垃圾郵件」? – Aya 2013-04-30 15:00:30

+0

請先搜索重複項,儘管您使用了特定的庫,但這是一個非常廣泛的主題。所以先受到教育。 – 2013-04-30 15:02:09

+0

不,你的問題不會成爲現在或當時給這個問題一個明確答案的單一答案。不,相反,在你發現的十個問題中,你究竟嘗試了什麼,展示你的嘗試的代碼以及哪些不適合你?你需要概述一下,如果你真的想得到這個答案。 – 2013-04-30 15:03:09

回答

14
  1. 確保設置了所有必需的標題。
  2. 檢查是否有任何額外的,可選的標題,你應該設置。
  3. 發送帶有不匹配的文本/ HTML部分的HTML /多部分消息被某些過濾器所淹沒。
  4. 絕對地,您以編程方式發送的任何郵件都應該有鏈接或關於如何退出的說明。這通常只能由您的ISP的人爲策劃黑名單和濫用部門執行。
  5. 確保您的SMTP服務器未被列入黑名單或聲譽不佳。
  6. 確保您的網絡服務器的聲譽並不差。一些掃描儀包括鏈中每個MTA的聲譽。
  7. 在發送消息之前查看消息內容。如果其中的任何內容甚至可以粗略地解釋爲試圖向某人推銷某件東西,那就改變它。
  8. 犧牲一個小動物到黑暗的電子郵件神和希望的希望。
  9. 檢查標記爲垃圾郵件的郵件標題,以查看垃圾郵件過濾系統是否留下了有關其被阻止原因的任何有用信息。
  10. 詢問接收服務器的管理員爲什麼信息被阻止。
  11. 接受沒有,也永遠不會是「這個問題上的確切解決方案」。永遠。
+7

這個問題中刪除CakePHP標籤。在您的經驗中,毛茸茸的可愛動物比其他動物如蜥蜴或蟑螂有更好的效果嗎? :D – thaJeztah 2013-04-30 17:55:47

+0

@thaJeztah它真的取決於你打算處理哪一個神,如果你不幸與Ia'hu或Km'Kaast打交道,我希望你不會非常依賴*所有*你的孩子。 – Sammitch 2013-04-30 18:03:47

+0

也只有你一次帶來犧牲,絕不意味着它會永遠有幫助。 – 2013-04-30 18:08:00

3

任何確切的解決方案是有關於這個問題

遺憾的是沒有任何確切的解決方案。這是一個非常複雜的問題,可以防止出現精確的解決方案。

取而代之,您需要找出每個被標記爲垃圾郵件的郵件是什麼導致垃圾郵件評分,然後對您使用的軟件和系統的部分進行逆向工程 - 配置(改進配置和設置)或處理(修補您使用的軟件並重新編譯/部署)。

如果你想改善這個網站的情況 - 你寫道,許多現有的問題令人失望 - 請保留一份工作日誌並記錄每個案例。將此作爲答案,以便將來的用戶可以從中受益。這不會像以前的用戶一樣在網站上完成這些錯誤,而不會執行此文檔,因此信息丟失。

1

我知道這已經有一個可接受的答案,但這是爲其他人可能有像我一樣的問題,最終在這裏。我有一個網站,並從我的網站發送郵件結束在垃圾郵件框。即使我嘗試使用phpmailer並將我們公司的郵件服務器添加爲SMTP。

但是,這可以通過將網站的IP地址列出到郵件服務器的發送過濾器的白名單輕鬆解決。這是怎麼做到的,我不知道,因爲郵件服務器的管理員爲我做了這個(我猜,谷歌它)。

這樣做意味着如果接收方對您的郵件服務器執行DNS查找或IP查找。郵件服務器告訴接收方它確實是從他或他的關聯IP地址發送的,因此它不會在垃圾郵箱中結束。

但是,如果你這樣做,就不需要phpmailer和標準的mail()函數。

相關問題