質問
構築中のサイトからメールを送信しようとしていますが、最終的にはyahoo spamフォルダに入ります。資格情報を送信するのは電子メールです。正当化するために何ができますか?
$header = "From: site <sales@site.com>\r\n";
$header .= "To: $name <$email>\r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site <sales@site.com>" . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);
解決
Ted Percivalの提案に加えて、 PHPMailer を使用して、ヘッダーを手動で作成するのではなく、メールを作成してください。私はこのクラスを広範に使用しましたが、Yahooや他の人によってスパムとして拒否された電子メールに問題はありませんでした。
他のヒント
- メールでHTMLを使用しないでください。
- マシンの実際のホスト名を指す静的IPおよびリバースDNS(PTR)を備えた正当なメールサーバー経由で送信します(前方参照と一致します)。
- Message-IDを含めます(または、ローカルメーラーが追加することを確認します)。
- SpamAssassin を介してメールを実行し、一致するスコアの悪いルールを確認します。一致させないでください。
- DomainKeys Identified Mail を使用して、メッセージにデジタル署名します。
Yahoo!から以下を試してみました。 Webホスティングアカウント:
$email = "me@site.com"; $subject = "Simple test"; $body = "Simple test"; $header = "From: site \r\n"; $header .= "To: $name \r\n"; $header .= "Subject: $subject\r\n"; $header .= "Reply-To: site " . "\r\n"; $header .= "MIME-VERSION: 1.0\r\n"; $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $phpversion = phpversion(); $header .= "X-Mailer: PHP v$phpversion\r\n"; mail($email,$subject,$body,$header);
ただし、ヘッダーに重複がある場合は、次の操作のみを行う必要があります。
$email = "me@site.com"; $subject = "Simple test"; $body = "Simple test"; $header = "From: site \r\n"; $header .= "MIME-VERSION: 1.0\r\n"; $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $phpversion = phpversion(); $header .= "X-Mailer: PHP v$phpversion\r\n"; mail($email,$subject,$body,$header);
「sendmail」(PHP mail()関数の下にある)が追加のパラメーターを必要とする可能性もあります。リターンヘッダー(Return-Pathなど)を設定したとおりに設定できないという問題がある場合は、 fifth mail()パラメーターを使用する必要があります。例:
mail('recipient@domain.com', 'Subject', $mail_body, $headers, " -f sender@domain.com");
真のバニラsendmailがこれに問題があるかもしれないというさらなる証拠があります! PHPの基礎となるmail()がターゲットサーバーでサポートされているため、「ポストフィックス」があればいいのです。
Ted Percivalの提案、 SPFレコード site.comの。 site.comにSPFレコードがない場合、SPFレコードを追加すると(もちろん、問題のIPアドレスが許可されます)、スパムフィルターを通過したメールを取得するのに役立ちます。
また、メールでHTMLを絶対に使用する必要がある場合は、プレーンテキストバージョンも含めるようにしてください。 「multipart / alternative」というコンテンツタイプを使用します。 &quot; text / html&quot;の代わりに。
Tedの提案は、Timの提案と同様に優れていますが、Yahoo / Hotmail / etcに確実にメールを送信できる唯一の方法は、PEARメールクラスを使用することです。それらを試してください&amp; (サーバーに問題がない場合)動作することをほぼ保証できます。
TedとTimには素晴らしい提案があります。シャビーローブもそうです。私たちはPHPMailerを使用しており、スパムフィルターには問題がありません。
注意すべき点の1つは、MIME形式を使用している場合、多くのスパムフィルターがテキストバージョンを持たないことをカウントすることです。すべてのヘッダーとテキストバージョンを自分で追加することも、PHPMailerまたはPEARメールライブラリに任せることもできます。テキスト版を用意することは役立つかもしれませんが、それは良い習慣であり、ユーザーフレンドリーです。
私はあなたのコードサンプルが単なるサンプルであることを知っていますが、それは言う価値があります:ユーザーが提供したデータをメールヘッダーにドロップしないでください。期待するデータであることを確認してください。 PHPメールスクリプトをオープンリレーに変えるのは簡単であり、誰も望んでいません。
メール形式については、rfc 822およびrfc 2045を確認してください。 pythonのEmailクラスは本当に使いやすいと感じています。 phpのPEARは同じことをする(以前のメールによると)と思います。また、ヘッダーと本文は&quot; \ r \ n \ r \ n&quot;で区切られています。コードで自動的に挿入されるかどうかはわかりませんが、ヘッダーに追加してみてください。
DK / SPFが必要になるとは思わない(DK / SPFをサポートしていないWebサーバーがたくさんあるため)。ブロックされる原因となっている可能性のある要因が多数存在する可能性があります(少なくとも10Kの異なる基準と方法。p0f、グレーリスト、グレーリスト、ブラックリストなど)。メールが適切にフォーマットされていることを確認してください(これにより大きな違いが生じます)。完全なヘッダーを生成するライブラリを調べてください。そうすれば、間違いを犯す可能性が最も低くなります。
SPFレコードの追加は非常に簡単です。試してみてください。
これはdreamhostとgooglemail用です WebサーバーのIPアドレス(私の場合はgooglemailの前の行)も広告する必要があります 最後の行は、サーバーにソフト拒否(スパムとしてマークするが削除しない)を行うよう指示しています。「-」の代わりに使用しています。 (削除)Googleのドキュメントにはそう言われている:-)
TXTレコードです v = spf1 ip4:64.111.100.0/24 ip4:66.33.201.0/24 ip4:66.33.216.0/24 ip4:208.97.132.0/24 ip4:208.97.187.0/24 ip4:208.113.200.0/24 ip4:208.113.244.0/24 ip4:208.97.132.74 ip4:67.205.36.71 include:aspmx.googlemail.com mx〜all
希望する