3

一見すると、多くのユーザーがこの質問を重複としてマークしていることはわかっていますが、10 を超える質問を読んだ後、満足のいく回答が得られませんでした。ほとんどすべての質問に、「それについてできることはあまりありません。」よくわかりません」、「確実なショットのトリックはありません」などです。それが私がこの質問を書いている理由です。これは非常に一般化された質問であり、すべての PHP 開発者が少なくとも一度は直面していると思います。質問は..

私はプロジェクト管理アプリケーションに取り組んでおり、アクションが発生するとすぐにメールを送信する代わりに、タスクが作成されたとき、またはバグメールに関する誰かのコメントが関連するユーザーに送信されたときに、phpmailer を使用してメールを送信しています。「通知」テーブルを作成しました。ここで実際にすべてのメール データと 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 = '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'); 
                }           
            }
        }
    }

私がテストしたところによると、phpmailerを使用しているので、必要なヘッダーを設定し、ヘッダーに「Return-Path:」と「Reply-To:」も設定しているため、すべてがうまく見えます。

この問題に関する正確な解決策はありますか

4

4 に答える 4

15
  1. 必要なヘッダーがすべて設定されていることを確認してください。
  2. 設定する必要がある追加のオプションのヘッダーがあるかどうかを確認してください。
  3. テキスト/HTML セクションが一致しない HTML/マルチパート メッセージの送信は、一部のフィルタによって嫌われています。
  4. プログラムで送信するすべてのメールには、オプトアウトする方法に関するリンクまたは指示が含まれている必要があります。これは通常、人間が精選したブラックリストと ISP の不正使用部門によってのみ実施されます。
  5. SMTP サーバーがブラックリストに登録されていないこと、または評判が悪いことを確認してください。
  6. Web サーバーの評価が低くないことを確認してください。一部のスキャナーには、チェーン内のすべての MTA のレピュテーションが含まれています。
  7. メッセージを送信する前に、メッセージの内容を確認してください。その中の何かが誰かに何かを売ろうとしていると大雑把にさえ解釈できる場合は、それを変更してください.
  8. メールの闇の神々に小動物を生け贄に捧げ、希望に逆らう。
  9. スパムとしてマークされたメッセージのヘッダーをチェックして、スパム フィルタリング システムがブロックされた理由に関する有用な情報を残しているかどうかを確認します。
  10. 受信サーバーの管理者に、メッセージがブロックされた理由を尋ねてください。
  11. 「この問題の正確な解決策」は存在せず、決してそうではないことを受け入れてください。これまで。
于 2013-04-30T15:12:51.823 に答える
3

この問題に関する正確な解決策はありますか

残念ながら違います。これは、正確な解決策を妨げる非常に複雑な重要な問題です。

代わりに、スパムとしてマークされた電子メールごとに、そのスパム スコアリングにつながった原因を突き止め、使用しているソフトウェアとシステムの一部をリバース エンジニアリングする必要があります。構成 (構成とセットアップの改善) ) または処理 (使用するソフトウェアにパッチを適用し、再コンパイル/展開)。

この Web サイトの状況を改善したい場合は (多くの既存の質問が失望していると書いています)、その作業の作業ログを保持し、各ケースを文書化してください。将来のユーザーがその恩恵を受けることができるように、これをここに回答として入れてください。これは、以前のユーザーがサイトでこのドキュメントを実行せずに行ったのと同じ過ちを犯していないため、情報が欠落しています.

于 2013-04-30T15:06:04.170 に答える
1

これにはすでに受け入れられている回答があることは知っていますが、これは私のような同じ問題を抱えてここにたどり着いた可能性のある他の人向けです。私はウェブサイトを持っていて、私のウェブサイトから送信されたメールが迷惑メールボックスに入ってしまいました. phpmailerを使って、自社のメールサーバーをSMTPとして追加しようとしても。

ただし、これは、Web サイトの IP アドレスをメール サーバーの送信フィルターにホワイト リストに登録することで簡単に解決できます。メールサーバーの管理者が私のためにこれを行ったので、これが正確にどのように行われるかはわかりません(グーグルだと思います)。

これを行うということは、受信側がメール サーバーに対して DNS ルックアップまたは IP ルックアップを行う場合を意味します。メールサーバーは受信側に、それが実際に彼または彼の関連付けられた IP アドレスから送信されたため、スパムボックスに到達しないことを伝えます。

ただし、これを行う場合、phpmailer は必要なく、標準の mail() 関数も機能します。

于 2014-04-22T12:18:34.643 に答える