2017-03-08 4 views
0

問題の原因がわかりません! mail()は完全に動作しています(私はすでに単純なPHPファイルでテストしていますが)私のフォームはメールを送信しません!Sendemailを使用したHTMLフォーム

HTML

<section id="contact"> 
    <div id="google-map" class="wow fadeIn" data-latitude="35.7777622" data-longitude="10.8285004" data-wow-duration="1000ms" data-wow-delay="400ms"></div> 
    <div id="contact-us" class="parallax"> 
     <div class="container"> 
     <div class="row"> 
      <div class="heading text-center col-sm-8 col-sm-offset-2 wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms"> 
      <h2>Contact</h2> 
      <p>Send a message</p> 
      </div> 
     </div> 
     <div class="contact-form wow fadeIn" data-wow-duration="1000ms" data-wow-delay="600ms"> 
      <div class="row"> 
      <div class="col-sm-6"> 
       <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php"> 
       <div class="row wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms"> 
        <div class="col-sm-6"> 
        <div class="form-group"> 
         <input type="text" name="name" class="form-control" placeholder="Name" required="required"> 
        </div> 
        </div> 
        <div class="col-sm-6"> 
        <div class="form-group"> 
         <input type="email" name="email" class="form-control" placeholder="Email" required="required"> 
        </div> 
        </div> 
       </div> 
       <div class="form-group"> 
        <input type="text" name="subject" class="form-control" placeholder="Sub" required="required"> 
       </div> 
       <div class="form-group"> 
        <textarea name="message" id="message" class="form-control" rows="4" placeholder="Type your message" required="required"></textarea> 
       </div>       
       <div class="form-group"> 
        <button type="submit" class="btn-submit">Send</button> 
       </div> 
       </form> 
      </div> 
      <div class="col-sm-6">       
      </div> 
      </div> 
     </div> 
     </div> 
    </div>   
    </section><!--/#contact--> 

main.js

// Contact form 
var form = $('#main-contact-form'); 
form.submit(function(event){ 
    event.preventDefault(); 
    var form_status = $('<div class="form_status"></div>'); 
    $.ajax({ 
     url: $(this).attr('action'), 
     beforeSend: function(){ 
      form.prepend(form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Progress...</p>').fadeIn()); 
     } 
    }).done(function(data){ 
     form_status.html('<p class="text-success">Thanks for your message</p>').delay(3000).fadeOut(); 
    }); 
}); 

sendemail.php

<?php 
$name  = @trim(stripslashes($_POST['name'])); 
$from  = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 
$to   = '[email protected]'; 

$headers = array(); 
$headers[] = "MIME-Version: 1.0"; 
$headers[] = "Content-type: text/plain; charset=iso-8859-1"; 
$headers[] = "From: {$name} <{$from}>"; 
$headers[] = "Reply-To: <{$from}>"; 
$headers[] = "Subject: {$subject}"; 
$headers[] = "X-Mailer: PHP/".phpversion(); 

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

die; 

あなたは私が問題を考え出す助けてくださいもらえますか? sendemail.phpファイルに単純なメール('[email protected] '、' My Subject '、' message ')を追加すると、フォームが送信されるたびにメールが届きます!しかし、私はメール($、$件、$メッセージ、$ヘッダー)を受け取ることはありません。

ありがとうございました

+0

エラー抑制演算子(@)は、コードのデバッグに役立つエラーメッセージを表示しないので使用しないでください。通知を含むPHPエラーを生成しないように、常にコードを記述する必要があります。 –

答えて

0

私はヘッダーが文字列である必要があると思います。

$headers = ''; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
$headers .= "From: {$name} <{$from}>\r\n"; 
$headers .= "Reply-To: <{$from}>\r\n"; 
$headers .= "Subject: {$subject}\r\n"; 
$headers .= "X-Mailer: PHP/".phpversion() . "\r\n"; 

http://php.net/manual/en/function.mail.php

また、私はあなたにも、AJAXリクエストを介してデータを送信する必要があると思う$ _POST

http://php.net/manual/en/function.filter-input.php

をフィルタリングする必要があります。

$.ajax({ 
    url: $(this).attr('action'), 
    type: "POST", 
    data: $(this).serialize(), 
+0

ありがとう!しかし、残念ながら私はEメールを受信しましたが、空のEメールを受信しました。あなたのAjaxリクエストを試しましたが、それはまだ同じです! – ThibaudJ

1

あなたは、ユーザーの入力に基づいてFromヘッダーを偽装しています。これをしないでください。

電子メールメッセージのFromヘッダーは、電子メールメッセージの送信者を正確に表す必要があります。このヘッダーに別の値を挿入すると、多くのメールサーバーはメールを拒否したり、スパムとしてフラグを付けたりしますSPFおよび/またはDMARCの小切手。

メッセージの送信元を正確に表すFromヘッダーを使用します。たとえば、Webサイトがexample.comの場合は、FromヘッダーをFrom: [email protected]と設定します。ユーザが設定した電子メールアドレスと名前をメッセージの本文またはReply-Toヘッダーに含めます。

+0

ありがとう、これは動作しています!今、私は電子メールを受け取りますが、残念ながら、私は空のメッセージと空のサブジェクトを受け取ります(私は追加したと確信していますが)。何か案は? – ThibaudJ

関連する問題