2016-06-29 17 views
0

PHPを使用して電子メールを送信しようとしています。私は以下のコードを持っています:PHPで電子メールを送信 - 決して受け取らない

$action=$_REQUEST['action']; 
    if ($action=="") /* display the contact form */ 
    { 
    ?> 
    <form action="" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" name="action" value="submit"> 
    Your name:<br> 
    <input name="name" type="text" value="" size="30"/><br> 
    Your email:<br> 
    <input name="email" type="text" value="" size="30"/><br> 
    Your message:<br> 
    <textarea name="message" rows="7" cols="30"></textarea><br> 
    <input type="submit" value="Send email"/> 
    </form> 
    <?php 
    } 

else    /* send the submitted data */ 
{ 
$name=$_REQUEST['name']; 
$email=$_REQUEST['email']; 
$message=$_REQUEST['message']; 
if (($name=="")||($email=="")||($message=="")) 
    { 
    echo "All fields are required, please fill <a href=\"\">the form</a> again."; 
    } 
else{  
    $from="From: $name<$email>\r\nReturn-path: $email"; 
    $subject="Message sent using your contact form"; 
    mail("[email protected]", $subject, $message, $from); 
    echo "Email sent!"; 
    } 
} 

私は欠落しているフィールドを埋めて、送信ボタンをクリックしました。このページには電子メールが送信されたことが表示されますが、電子メールをチェックすると電子メールは受信されませんでした。私のコードで何が間違っていますか?

+0

のようなものはphpmailerのを試してみてください。 mail()はすべてのサーバーで正しく動作しないためです。 –

+0

'if(mail(" [email protected] "、$件名、$メッセージ、$から)){echo"メールは配信可能です! } else {echo "メールを送信できません!"; } '、少なくとも誤解を招く出力は少なくなります:) – NICK

+0

あなたのコードをデバッグしてくださいerror_reporting(E_ALL); ini_set( 'display_errors'、 '1'); – Dave

答えて

1

まずはあなたのメールアドレスを確認してくださいか?

このようにしてください。

if(mail("[email protected]", $subject, $message, $from)){ 
    echo "success"; 
}else{ 
    echo "fail"; 
} 

この状態からのメッセージを確認してください。

+0

mailhost()をlocalhost上で構成するのが難しいため、実際のサーバで試してみてください –

1

この作業をうまく試してみてください!

<form action="" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" name="action" value="submit"> 
    Your name:<br> 
    <input name="name" type="text" value="" size="30"/><br> 
    Your email:<br> 
    <input name="email" type="text" value="" size="30"/><br> 
    Your message:<br> 
    <textarea name="message" rows="7" cols="30"></textarea><br> 
    <input type="submit" name="submit" value="Send email"/> 
    </form> 
    <?php 
if(isset($_POST["submit"])){ 
$name=$_REQUEST['name']; 
$email=$_REQUEST['email']; 
$message=$_REQUEST['message']; 
if (($name=="")||($email=="")||($message=="")) 
    { 
    echo "All fields are required, please fill <a href=\"\">the form</a> again."; 
    } 
else{  
    $from="From: $name<$email>\r\nReturn-path: $email"; 
    $subject="Message sent using your contact form"; 
    mail("[email protected]", $subject, $message, $from); 
    echo "Email sent!"; 
    } 
} 
1

最初の事はあなたはそれが失敗した可能性があるので、mail関数の結果をチェックして、

http://php.net/manual/en/function.mail.php#refsect1-function.mail-returnvalues

だからあなたに必要な、というあなたに伝えfalseを返す必要があり、次のとおりです。

if (mail("[email protected]", $subject, $message, $from)) { 
    echo "Email sent!"; 
} else { 
    echo "Can't send the email!"; 
} 

Can't send the emailと表示されている場合は、ログファイルを確認してください。

  • すべてはPHP &サイト設定で正しく構成されています。
  • ホストからメールサーバーに接続できます。

しかし、どのような場合に表示Email sent!、あなたはまだメールを受信できないながら?

ときまあ、mail機能がtrueを返します:[OK]を、それはメールサーバ上にある:メールが正常に配信

意味お知らせ単語*accepted* for delivery、のために受け入れられた

今、仕事の私の部分が完了しました。メールがユーザーに届くかどうかはまだ分かりません。

ご覧のとおり、メールシステムは複雑です。 「送信した」電子メールは、複数のサーバーを経由してその宛先に到達する可能性があります。途中の各サーバーは、輸送を遅らせたり、取り消すことさえできます。

さらに悪いことに、あなたのユーザーまたはユーザーのメールプロバイダがフィルタリングされて、あなたのメールアドレスが削除されることがあります。セキュリティ対策のために、彼らはあなたにそれについて何も知らせません。

メールがmail機能やPHPMailertrue結果を返している場合でも、ユーザーに達しているのであれば、あなたは実際に知っていることができませんでした。あなたが確かめることができるのは、メールが有能なメールサーバーに配信されることだけです。この場合

関連する問題