2013-04-30 109 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()函数。

相关问题