0

ここに私のPHPメーラーコードがあります:

if ($_POST) {
    $email=$_POST['email'];
    $subject=$_POST['subject'];
    $budget=$_POST['budget'];
    $text=$_POST['text'];
    $to="hello@mymail.com";

    mail($to, "Piece of Cake = ".$subject, $text, "Budget:".$budget, "From:".$email );
}

そして、ここに私のAJAXメール関数があります:

$(function (){
    $('button#send_brief').click(function(){
        var email = $('#brief_email');
        var subject = $('#brief_type');
        var budget = $('#brief_budget');
        var text = $('#brief_comments');
        var emailerData = 'email' + email +'&subject' + subject + '&budget' + budget+ '&text' + text;

        if(text=='') {
            $('#brief_email').css({'background-color':'red'});
         }
         else {

        $.ajax({
            type: "POST",
            url:"emailer.php",
            data: emailerData,
            success: function(){
                $('.success').fadeIn(1000);
                setTimeout (function(){
                $('.brief').slideUp({
                    duration: 1000,
                    easing: 'easeInSine'});}
                            ,2000);
                setTimeout (function(){
                $('#brief').fadeIn();}
                            ,3000);
                setTimeout (function(){
                $('.success').fadeOut(1000);}
                            ,2000);
            }

        });

        return false;}
    });   

});

そしてここに私のフォーム:

<form method="POST" action="" >
<fieldset>

            <label for="brief_email">Your email</label>
            <input type="text" id="brief_email" placeholder="your contact email here"/>
             etc ...
</fieldset>
</form>
<button id="send_brief">Send it</button>

まず、すべてのフィールドを空のままにしても、成功画面が表示されます。第二に、有効なデータを入力しても、送信されたメールが届きません。

私はコードを何度も見直しましたが、私には問題ないようです。

私が間違っている場所を見つけるのを手伝ってください。

4

3 に答える 3

2

あなたの問題はAJAXコンストラクトにあり、次のもので価値を得ることができません:val()

var email = $('#brief_email').val();
var subject = $('#brief_type').val();
var budget = $('#brief_budget').val();
var text = $('#brief_comments').val();

そうしないval()と、値ではなくオブジェクトが PHP スクリプトに送信されます。

そして、あなたが欠けているvarsコンストラクト=

var emailerData = 'email=' + email +'&subject=' + subject + '&budget=' + budget+ '&text=' + text;

また、あなたの構造は悪いです。チェックmail()mail()を必要とする以外の値を送信することはできません。そして、が常に true であることを確認します。少なくとも 1 つの投稿値を確認する必要があります。$_POST$_POST

<?php

if (isset($_POST['email'])) {
    $email=$_POST['email'];
    $subject=$_POST['subject'];
    $budget=$_POST['budget'];
    $text=$_POST['text'];
    $to      = 'mail@example.com';

    $subject = "Piece of Cake = ".$_POST['subject'];
    $message = "New message from website

    Email: $email
    Budget: $budget
    Comments: $text";

    $headers = 'From: ' . $email . "\r\n" .
        'Reply-To: ' . $email . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);
}
?>
于 2012-08-31T10:44:10.357 に答える
1

送信されたメールを確認する必要があります

if ($_POST) {
    $email=$_POST['email'];
    $subject=$_POST['subject'];
    $budget=$_POST['budget'];
    $text=$_POST['text'];
    $to="hello@mymail.com";

    if(mail($to, "Piece of Cake = ".$subject, $text, "Budget:".$budget, "From:".$email )) echo '1';
    else echo '0';

}

ajax 応答でメール送信応答を確認する

$(function (){
    $('button#send_brief').click(function(){
        var email = $('#brief_email');
        var subject = $('#brief_type');
        var budget = $('#brief_budget');
        var text = $('#brief_comments');
        var emailerData = 'email' + email +'&subject' + subject + '&budget' + budget+ '&text' + text;

        if(text=='') {
            $('#brief_email').css({'background-color':'red'});
         }
         else {

        $.ajax({
            type: "POST",
            url:"emailer.php",
            data: emailerData,
            success: function(result){
            if(result == 1){
    $('.success').fadeIn(1000);
                setTimeout (function(){
                $('.brief').slideUp({
                    duration: 1000,
                    easing: 'easeInSine'});}
                            ,2000);
                setTimeout (function(){
                $('#brief').fadeIn();}
                            ,3000);
                setTimeout (function(){
                $('.success').fadeOut(1000);}
                            ,2000);
}
            }

        });

        return false;}
    });   

});
于 2012-08-31T10:38:28.530 に答える
1

メール送信コードには 2 つの問題があります。

mail($to, "Piece of Cake = ".$subject, $text, "Budget:".$budget, "From:".$email );

最初の問題は、戻り値をチェックしていないことです:

if (false === mail( ... )) { echo "Yelp! Mail not sent"; }

2 番目の問題は、メール ヘッダーを 4 番目のパラメーターに結合する必要があることです。

mail($to, "Piece of Cake = ".$subject, $text, "Budget: $budget\r\nFrom: $email");

これは、5 番目のパラメーターが 用sendmailであり、メール ヘッダー用の別のフィールドではないためです。

于 2012-08-31T10:40:50.993 に答える