2

フォームが失敗した場合、ユーザーにエラー メッセージが表示され、メールが送信されるようにスクリプトを作成しました。ただし、メールが届きません。スクリプトに間違いは見当たりませんし、電子メールはどこにも見つかりません (スパムにもありません)。問題は何ですか?私たちは Linux サーバーで作業していると思うので、デフォルトでメールエージェントがインストールされているはずですよね? ファイアウォールがメッセージをブロックしている可能性はありますか?

コード:

<?php

if (isset($aErrors) && count($aErrors) > 0 ) {
        print '<ul class="errorlist">';
        foreach ( $aErrors as $error ) {
          print '<li>' . $error . '</li>';
        }
        print '</ul><br />';


$mail_ontv = "info@example.com"; 

$_POST['onderwerp'] = "Geen Twinfield Abonnement";

    // set datum 
    $datum = date("d.m.Y H:i"); 

    // set ip 
    $ip = $_SERVER['REMOTE_ADDR']; 

    $inhoud_mail .= $_SERVER['SCRIPT_URI'] . "\n\n";

    $inhoud_mail .= "Iemand probeerde zich aan te melden, maar had geen Twinfield abonnement!\n";   
    $inhoud_mail .= "Bedrijfsnaam: " . $_SESSION['bedrijfsnaam'] . "\n"; 
    $inhoud_mail .= "Telefoonnummer: " . $_SESSION['telefoonnummer'] . "\n"; 
    $inhoud_mail .= "E-mail adres: " . $_SESSION['email'] . "\n"; 
    $inhoud_mail .= "Telefoonnummer contactpersoon: " . $_SESSION['telefoonnummercontact'] . "\n"; 
    $inhoud_mail .= "E-mail adres contactpersoon: " . $_SESSION['emailcontact'] . "\n"; 
    $inhoud_mail .= "Gewenste gebruikersnaam: " . $_SESSION['gebruikersnaam'] . "\n";
    $inhoud_mail .= "Gekozen abonnement: " . $_SESSION['abonnement'] . "\n\n"; 

    $inhoud_mail .= "Verstuurd op " . $datum . " via het ip " . $ip . "\n\n"; 

    $headers = "From: " . $_SESSION['bedrijfsnaam'] . " <" . $_SESSION['emailcontact'] . ">";

    $headers = stripslashes($headers);
    $headers = str_replace("\n", "", $headers); // Verwijder \n 
    $headers = str_replace("\r", "", $headers); // Verwijder \r 
    $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes 

    $_POST['onderwerp'] = str_replace("\n", "", $_POST['onderwerp']); // Verwijder \n 
    $_POST['onderwerp'] = str_replace("\r", "", $_POST['onderwerp']); // Verwijder \r 
    $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes 

    mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers);                                      
}

?>

みんなありがとう!

4

2 に答える 2

5

Mac B が提案した以上のいくつかの追加の考え:

1) 電子メールの送信を処理する多くの PHP ライブラリがあります。ローカルまたはリモートの SMTP サーバーと連携できます。たとえば、http://swiftmailer.org/です。

2) 最近のほとんどの電子メール プロバイダー (Gmail、Yahoo など) は、ローカル コンピューターからのみ送信された電子メールをスパム ブロックします。安価なサードパーティの SMTP サービスを使用してメールを送信することをお勧めします。これにより、信頼性が向上します。私が何年も使ってきたのは、CritSend (critsend.com) と呼ばれるものです。他にもたくさんあります。

于 2012-07-27T19:44:09.707 に答える
2

の戻り値を確認しましたmail()か?ブール値のfALSEを取得した場合、PHPがSMTPサーバーへの電子メールを処理しようとしているときに何かが爆発しました。

メールがtrueを返す場合、ハンドオフは成功しています。SMTPサーバーのログを調べて、その時点から電子メールに何が起こったかを確認する必要があります。

覚えておいてください:PHPが電子メールの送信に関与しているのは、現実の世界では、封筒を受け取ってメールボックスにドロップすることです。それでおしまい。他のすべては完全にPHPの範囲と制御の範囲外です。

于 2012-07-27T19:40:36.310 に答える