1

したがって、ヘッダー情報を変更せずにこれを実行してhtmlタイプのメールを送信すると送信されますが、htmlメールで送信すると送信されません。

コードは次のとおりです。

<?php
    $to = "someone@gmail.com";
    $subject = "Order Confimation - mywebsite.com";
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= "From: <contact@mywebsite.com>";
    $message = "
        <!DOCTYPE html>
        <html lang='en-us'>
            <head>
                <meta charset='utf-8'>
                <title>Order Confirmation</title>
                <style type='text/css'>
                    //style information
                </style>
            </head>
            <body>
                <div class='box'>
                    <h1 class='right'>Thanks!</h1>
                    //Blah blah blah
                </div>
            </body>
        </html>
    ";

    mail($to, $subject, $message, $headers);

    if (mail($to, $subject, $message, $headers)) {
        echo "<p class='hide'>E-mail Sent</p>";
    } else {
        echo "<p class='hide'>Problem</p>";
    }           
?>

そして、送信された電子メールを返しますが、電子メールは受信トレイに届きません

助言がありますか?

また、pear パッケージが有効になっています。

4

4 に答える 4

2

上記のコードに問題はありません (ただしmail()、エラー チェック ループの外で 1 回、「if」内で 1 回、2 回呼び出すことを除いて、2 つのメールを送信します)。

簡単なテストでは、Google Apps のメール アドレスに問題なく配信されたので、特に問題を引き起こしているはずのコードについては何もありません。

スパム フィルタリングは累積的なゲームです。小さな問題が複数ある可能性があり、どれもスパムとしてマークされませんが、累積的にスコアが制限を超えてしまいます。

この場合、テキスト/プレーン コンポーネントを含まない HTML のみの電子メールを送信しています。これは、ラクダの背中を壊すストローとして機能しているように見える、スコアに対するマイナスのマークです。評判の悪い共有ホストから送信している場合は、さらにいくつかのポイントを獲得する可能性があり、PHP メール設定が無効なリターン パスまたはその他のオリジン ベースのエラーをプッシュしている可能性があります。

http://krijnhoetmer.nl/stuff/php/html-plain-text-mail/ごとに、text/plain と text/html の両方を含むマルチパートを送信してみてください。

それがうまくいかない場合は、成功した平文メールのヘッダー全体を投稿していただければ、他の指標があるかどうかを確認できるかもしれません。

Gmail はほとんどのメールを受け入れますが、受け入れた後にブラックホール化するだけなので、Gmail を使用してテストしている場合、フィードバックはあまり得られません。

メールは難しいゲームです。アプリの成功のために配信が必要な場合は、サードパーティ サービスの使用を検討してください。

これらのサービスは、アプリからイベント駆動型の電子メールを送信し、ISP 配信側ですべての混乱を処理するように設計されています.

完全開示:私は PostageApp の配達担当者です。

于 2012-05-25T19:53:18.973 に答える
0

mail 関数は true を返すので、次のように言う必要があります。

// mail() function return 0 if all right, so compare this with 0
if (mail($to, $subject, $message, $headers)) {
    echo "E-mail Sent";
} else {
    echo "Problem";
}  

いいえ :

if (mail($to, $subject, $message, $headers)==0)
于 2012-05-25T17:43:00.583 に答える
0

PHPでメール機能を利用している場合は、送信メールのSMTP設定を含める必要があると思います。したがって、技術的には、メールは送信済みとして報告されますが、メール プロバイダーを経由していません。(メール機能を使用する場合、Javaでそれを行う必要があることは知っています。)

于 2012-05-25T17:27:58.067 に答える
0

私はあなたが持っていないことに気づきました

$headers .= 'To: ';

それと何か関係があるのでしょうか?

于 2012-05-25T17:23:57.360 に答える