2016-07-21 5 views
0

こんにちは私はサイトを開発していて、phpを使用してメールフォームを作成しています。「ローカルホスト」のポート25でメールサーバーに接続できませんでした。等。"その結果、潜在的な解決策は、サイトをオンラインにすることでした。したがって、PHPコードがライブサイトに挿入され、エラーは表示されませんでしたが、電子メールアドレスにリストされたメールは送信されませんでした。私は今このフォームを約1週間作業していて、インターネット上で利用可能なさまざまなフォームを試しましたが、メールはまだ受け取りませんでした。コードは以下の通りですマイPHP:PHPを使用してメールフォームを作成する方法

UPDATED PHPコード

 <?php 

    //Checks for header injection 
    function has_header_injection($str){ 
     return preg_match("/[\r\n]/",$str); 
    } 


    if(isset($_POST['contact_submit'])){ 
     $name = trim($_POST['name']); 
     $email = trim($_POST['email']); 
     $msg = $_POST['message']; 

     //check to see if name or email have header injecion 

     if(has_header_injection($name) || has_header_injection ($email)){ 
      die(); //if true kill script 
     } 

     if(!$name || !$email || !$msg){ 
      echo '<h4 class = "error"> All fields are required </h4> <a href = "contact.php" class = "button block"> Go Bacck and Try again </a>'; 
      exit; 
     } 

     //add recipient email to variable 
     $to = "[email protected]"; 
     $subject = "$name sent you a message via your contact form"; 

     $message = "Name: $name\r\n"; 
     $message .= "Email: $email\r\n"; 
     $message .= "Message:\r\n$msg"; 

     $message = wordwrap($message, 72); 
     //set mail headers into a variable 

     $headers = "MIME-Version: 1.0\r\n"; 
     $headers .="Content-type: text/plain; charset=iso-8859-1\r\n"; 
     $headers .= "From: $name <$email> \r\n"; 
     $headers .= "X-Priority: 1\r\n"; 
     $headers .= "X-MSMail-Priority:High\r\n\r\n"; 

    $status = mail ($to, $subject , $message , $headers); 
    var_dump($status); 

?> 

**HTML FORM** 

     <h5>Thanks for contacting </h5> 
    <p>Please allow 24 housr to respond</p> 
    <p> <a href = "/final" class = "bitton block">&laquo; Go to homepage </a> </p> 

    <?php } else {?> 
    <form method = "post" action = "" id = "contact-form"> 
    <label for = "name">Your name </label> 
    <input type = "text" id = "name" name = "name"> 

    <label for = "email">Your email</label> 
    <input type = "email" id = "email" name = "email"> 

    <label for = "message">and your message </label> 
    <textarea type = "message" id = "message" name = "message"></textarea> 

    <input type = "submit" class = "button next" name = "contact_submit" value ="Send Message"> 
    </form> 
    <?php } ?> 
    </div> 

メールフォーム上の任意の良いチュートリアルは素晴らしいし、潜在的な解決策になるも非常理解されるであろう。私は文字通りメールが送信されない理由/考えられない。

-------- PHPコードが更新されました-------

RESULT https://gyazo.com/e9abf452e3cf370297cf3a3a2f51d5f6

+0

'$ ret = mail(....)'と 'var_dump($ ret);'のような 'mail()'メソッドの戻り値を調べて、変数に何を表示させます。それが本当であれば、電子メールを送るべきです。また、サーバーにメールサーバーがあるかどうか確認してください。共有サーバーを試していますか? –

+0

スウィフトメーラーは、私がPHPで電子メールを送信するために出くわした最も簡単な頭痛です。それはあなたのためにすべての重い持ち上げを行います。あなたがライブラリで大丈夫なら、このライブラリを使うことを確かに検討してください。 http://swiftmailer.org/docs/messages.html –

+0

@DanielDudas提案に感謝はい私はそれを試して、それが更新されている質問を確認してください。 –

答えて

0

を更新し、エラーメッセージをデバッグするために次の操作を実行してください。それはあなたがメールを送信するいくつかのエラーを持っていることを意味し、あなたの$status falseの場合

$status = mail ($to, $subject , $message , $headers); 
var_dump($status); 

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

を変更します。これがどうやって起こるのか教えてください。

更新:https://stackoverflow.com/a/24644450/688924は、mail()機能で間違っている可能性があることの非常に良い説明があります。付属の説明書に従ってください。 mail()の命令がすべて機能していない場合でも、phpMailerswiftmailer外部ライブラリのような代替手段を試すことをお勧めします。

+0

THANKS、質問が更新され、bool(false)と表示されます –

+0

sendmailがサーバー上で実行されているかどうかを確認します。 /var/log/maillogを確認してください –

+0

あなたはLinuxまたはWindowsを使用していますか? –

関連する問題