2012-03-01 12 views
1

私はPHPを使用して私のウェブサイトのフィードバックフォームを作っている、私はそれが動作していると思ったが、その後、コードに矢印を取った。PHPメールフォームが動作しない

とにかく、このフォームには、「名前」、「メール」、「件名」、「メッセージ」の4つのフィールドがあります。

4つのフィールドにすべて内容が含まれていると、「メッセージに失敗しました」という警告が表示されます。以下

combo 1 - "name", "email", "subject" 
combo 2 - "name", "email", "message" 
combo 3 - "name", "subject", "message" 
combo 4 - "email", "subject", "message" 

結果であったとして:ここで

combo 1 - "Thank you for your message." 
combo 2 - "Thank you for your message." 
combo 3 - "Message failed." 
combo 4 - "Thank you for your message." 

それは同様に

見て、私は4つの組み合わせ私を与える、4つのフィールドの3コンテンツでテスト

012:

<form action="contact.php" method="post"> 
    <input type="hidden" name="page" value="contact" /> 
    <input type="hidden" name="req" value="submit" /> 
    Your Name: <input type="text" name="name" /> 
    <br/> 
    Your Email: <input type="text" name="email" /> 
    <br/> 
    Subject: <input type="text" name="subject" size="69" /> 
    <br/> 
    Message: 
    <br/> 
    <textarea cols="63" rows="8" name="message"></textarea> 
    </br> 
    <input type="submit" value="Send" /> 
    <input type="reset" value="Clear" /> 
</form> 

そして、ここではcontact.phpです:私は使用していますhtmlコード

<?php 
    $field_name = $_POST['name']; 
    $field_email = $_POST['email']; 
    $field_subject = $_POST['subject']; 
    $field_message = $_POST['message']; 

    $mail_to = '[email protected]_website.com'; 
    $subject = 'Message from a site visitor '.$field_name; 

    $body_message = 'From: '.$field_name."\n"; 
    $body_message .= 'E-mail: '.$field_email."\n"; 
    $body_message .= 'Subject: '.$field_subject."\n"; 
    $body_message .= 'Message: '."\n"; 
    $body_message .= $field_message; 

    $headers = 'From: '.$field_email."\r\n"; 
    $headers .= 'Reply-To: '.$field_email."\r\n"; 

    $mail_status = mail($mail_to, $subject, $body_message, $headers); 

    if ($mail_status) { ?> 
<script language="javascript" type="text/javascript"> 
    alert('Thank you for your message.'); 
    window.location = './contact.html'; 
</script> 
<?php 
    } 
    else { ?> 
<script language="javascript" type="text/javascript"> 
alert('Message failed.'); 
window.location = './contact.html'; 
</script> 
<?php 
    } 
?> 

コードに問題はありますか?なぜこれをやっているのか分かりません。

+1

の組み合わせをテストするとき、あなたはフィールドにすべての回同じ値を入力しなかったIEのthisadressのhotmail @? 。毎回電子メールでcom。 – Anton

+0

メールは、失敗したメッセージで使用されていない唯一のメールだったので、悪い例でした。しかし、あなたはポイントを得る。 – Anton

+0

はい、私は各フィールドに同じ値を入れました – Anon

答えて

3

アントンからの偉大な答えですが、私はこれを少し詳しく掘り下げて答えを広げたかったのです。

誰かが電子メールを送信したことを確認したい場合は、PHPでハードコードされている必要があります(また、html5もクールですが、これは回避できますので、まだPHPが必要です)。私はまた、そこに無関係と感じたので、JavaScriptのビットを削除しました。これは私が試してみたいことです。短いので、同じページですべてやっています。多くの微妙な変化があります

<?php 
$field_name = $_POST['name']; 
$field_email = $_POST['email']; 
$field_subject = $_POST['subject']; 
$field_message = $_POST['message']; 


//If all required fields are filled 
if (!empty($field_name)&&!empty($field_email)&&!empty($field_message)) 
    { 
    $mail_to = '[email protected]_website.com'; 
    $subject = 'Message from a site visitor: '.$field_name; 

    $body_message = 'From: '.$field_name."\n"; 
    $body_message .= 'E-mail: '.$field_email."\n"; 
    $body_message .= 'Subject: '.$field_subject."\n"; 
    $body_message .= 'Message: '."\n"; 
    $body_message .= $field_message; 

    $headers = 'From: '.$field_email."\r\n"; 
    $headers .= 'Reply-To: '.$field_email."\r\n"; 

    $mail_status = mail($mail_to, $subject, $body_message, $headers); 

    echo "Thank you for your message."; 
    } 

//If not all required fields are filled display form again. 
else 
    { ?> 
    Please fill all the required fields.<br> 

    <form action="" method="post"> 
    <input type="hidden" name="page" value="contact" /> 
    <input type="hidden" name="req" value="submit" /> 

    <?php //The php bits are to retrieve the valid fields ?> 
    Your Name*: <input required type="text" value="<?php echo $field_name; ?>" name="name"/> 
    <br/> 
    Your Email*: <input required type="email" value="<?php echo $field_email; ?>" name="email" /> 
    <br/> 
    Subject: <input type="text" name="subject" value="<?php echo $field_subject; ?>" size="69" /> 
    <br/> 
    Message*: 
    <br/> 
    <textarea required cols="63" rows="8" name="message"><?php echo $field_message; ?></textarea> 
    </br> 
    <input type="submit" value="Send" /> 
    <input type="reset" value="Clear" /> 
    </form> 

    <?php 
    } 
?> 

そうでない場合は、それを送信者、あなたはこの

$field_name = $_POST['name']; 
$field_email = $_POST['email']; 
if (empty($field_email)) $field_email="[email protected]"; 
$field_subject = $_POST['subject']; 
$field_message = $_POST['message']; 

最後のもののようなものを入れることができますについてあなたが気にしないならば、私はこれは単なる擬似であると思いますほとんどのhtmlルールに準拠していないので、あなただけのテストおよび(素晴らしい仕事

... < HTML>タグ、<体>などを必要としています。

+0

私はまだ同じ問題があります。私は4つの組み合わせを試し、同じ問題を抱えていましたが、今度は「あなたのメッセージをありがとう」と言います。私は電子メールを受け取っていません。 – Anon

1

問題は、おそらくこれです:メールを送信すると、メールはFromヘッダ含まれている必要がありますhttp://php.net/manual/en/function.mail.php

から

引用。 additional_headersパラメータで を設定するか、 php.iniにデフォルトを設定できます。 メール():ヘッダ が不足している:「から」「sendmail_from」のphp.iniまたはカスタムに設定されていないこれを行うに失敗

は警告のようなエラーメッセージが表示されます。 Fromヘッダーは、WindowsのReturn-Pathも設定します。

つまり、適切な「From:[email protected]」を含むヘッダーがない場合、エラーが発生します。

関連する問題