3

I know that in first look many users mark this question as duplicate, but after reading more than 10 question I did not get any satisfactory answer, almost all question has answers having words like "There's not much you can do about it.", "I am not sure", "There is no sure shot trick" etc. that's why I am writing this question, and I think this is very generalized questions and every php developer faces it at least once, ok enough speech :) , now my question is..

I working on a project management application and am using phpmailer to send mail when any task is created or anybody comments on any bug mails are sent to related users, actually instead of sending mails as soon the action happens I have created a 'notifications' table where I actually save all mail data and a cron script then send all mails, here is some part of my cron script.

$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 = 'comment@changewebaddress.com';
                }

                $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'); 
                }           
            }
        }
    }

as per what I have tested everything look good, since I am using phpmailer it sets required header it also sets 'Return-Path:' and 'Reply-To:' in header.

Is there any exact solution on this issue

4

4 回答 4

15
  1. 确保设置了所有必需的标头。
  2. 检查是否有您应该设置的其他可选标头。
  3. 某些过滤器不赞成发送带有不匹配的文本/HTML 部分的 HTML/多部分消息。
  4. 您以编程方式发送的任何邮件绝对应该有一个链接或关于如何选择退出的说明。这通常仅由人工策划的黑名单和 ISP 的滥用部门强制执行。
  5. 确保您的 SMTP 服务器未列入黑名单或声誉不佳。
  6. 确保您的网络服务器没有不良声誉。一些扫描程序包括链中每个 MTA 的声誉。
  7. 在发送消息之前查看消息的内容。如果其中的任何内容甚至可以粗略地解释为试图向某人出售某物,请更改它。
  8. 将一只小动物献给电子邮件的黑暗之神,并以希望对抗希望。
  9. 检查标记为垃圾邮件的邮件的标题,看看垃圾邮件过滤系统是否留下任何有用的信息,说明它被阻止的原因。
  10. 询问接收服务器的管理员为什么邮件被阻止。
  11. 接受没有,也永远不会是“这个问题的确切解决方案”。曾经。
于 2013-04-30T15:12:51.823 回答
3

接受的答案中有很多很好的建议。此外,将 SPF 记录添加到我的 DNS 有助于避免垃圾邮件过滤器。了解有关 SPF 记录的更多信息:

http://en.wikipedia.org/wiki/Sender_Policy_Framework

Microsoft 有一个工具可以帮助创建此类记录:

http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/

于 2014-09-03T13:18:33.663 回答
3

有没有关于这个问题的确切解决方案

不幸的是没有。这是一个非常复杂的重要问题,它阻碍了精确的解决方案。

相反,您需要为每封标记为垃圾邮件的电子邮件找出导致垃圾邮件评分的原因,然后对您使用的软件和系统的部分进行逆向工程 - 任一配置(改进配置和设置) )或处理(修补您使用的软件并重新编译/部署)。

如果您想改善本网站上的情况 - 您写道,许多现有问题令人失望 - 请保留所做工作的工作日志并记录每个案例。将其作为答案放在这里,以便未来的用户可以从中受益。这不会像以前的用户在现场没有做这个文档那样做同样的错误,因此信息丢失了。

于 2013-04-30T15:06:04.170 回答
1

我知道这已经有一个可以接受的答案,但这适用于可能像我一样遇到同样问题并最终来到这里的其他人。我有一个网站,从我的网站发送的邮件最终进入垃圾邮件箱。即使我尝试使用 phpmailer 并将我们公司的邮件服务器添加为 SMTP。

然而,这可以通过将网站的 IP 地址列入邮件服务器的发送过滤器的白名单来轻松解决。我不知道这是如何完成的,因为邮件服务器的管理员为我做了这个(我猜是谷歌)。

这样做意味着如果接收方对您的邮件服务器进行 DNS 查找或 IP 查找。邮件服务器告诉接收方它确实是从他或他的关联 IP 地址发送的,因此它不会最终进入垃圾邮件箱。

但是,如果您这样做,则不需要 phpmailer,标准的 mail() 函数也可以工作。

于 2014-04-22T12:18:34.643 回答