2017-07-02 4 views
-1

J'ai récemment appris le HTML, js, CSS et PHP en créant des pages web et en les postant sur mon serveur apache2 hébergé sur mon framboise pi avec une adresse no-ip.com. Mon premier vrai projet d'apprentissage de PHP a été de créer un formulaire simple pour ensuite m'envoyer un email, mais je continue à courir sur le problème de la fonction mail() qui s'exécute sans erreur, mais n'envoie pas de mails.ne pas recevoir d'emails de la fonction php mail()

Voici la forme:

<form class="" action="/FormTesting/sendMail.php" method="post"> 
    Name:<br><input type="text" name="name" value="" required><br> 
    Email:<br><input type="text" name="email" value="" required><br> 
    Message:<br><textarea name="message" rows="8" cols="80" required></textarea><br> 
    Subject: 
    <input type="radio" name="subject" value="Hello!">Hello! 
    <input type="radio" name="subject" value="Whats up">Whats Up!<br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

est ici la référence du fichier PHP dans « action » attribut de la forme:

<?php 
if($_SERVER["REQUEST_METHOD"] == "POST") { 
    $to = "[email protected]"; 
    $name = $_POST["name"]; 
    $email = $_POST["email"]; 
    $message = $_POST["message"]; 
    $subject = $_POST["subject"]; 

    echo $name; 
    echo $email; 
    echo $message; 
    echo $subject; 

    $headers = array("From: " . $email, 
"Reply-To: " . $to, 
"X-Mailer: PHP/" . PHP_VERSION); 

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

} else { 
    echo $_SERVER["REQUEST_METHOD"]; 
} 
?> 

Je comprends que cette question a été posée, et je J'ai essayé la plupart des méthodes définies par d'autres réponses, mais je n'arrive toujours pas à faire fonctionner la fonction PHP mail(). La meilleure information que j'ai est que je dois faire une sorte d'installation ou de mise en forme sur le serveur lui-même pour permettre l'envoi de courriels, mais je n'ai pas encore trouvé de documentation et/ou d'explication. (I.e. phpMailer - mais quand même ... comment?)

EDIT:

J'ai vérifié la valeur de retour de la fonction de messagerie. . .

if(mail("[email protected]", "subject", "message", $headers)) { 
    echo "TRUE"; 
    }else { 
    echo "FALSE"; 
    } 

. . . et il s'avère être de retour faux. Je suppose que cela signifie que c'est une erreur dans mon code, alors?

EDIT:

Apparemment, je n'étais pas clair quand je dit que j'ai fait des recherches avant de poster cette question. J'ai essayé tout ce qui a été donné comme une réponse à la question que le mien était fermé comme un «double» de, d'où la question de toute façon.

+0

Vous ne vérifiez pas la valeur de retour de la fonction 'mail()'. C'est le moins que tu devrais. Chaque fonction dans le manuel de PHP a les valeurs de retour documentées, en apprendre davantage sur la valeur de retour et le gérer pour faire le plus de petites choses - http://php.net/mail - Editer votre question et expliquer quelle valeur de retour vous attendiez et quelle réponse valeur que vous avez. Si le retour du courrier est vrai et que vous ne recevez pas l'email, c'est hors de portée de PHP. – hakre

+0

J'ai vérifié la valeur de retour. C'est faux, et je ne sais pas quoi faire à ce sujet. –

+0

Cela signifie simplement que l'envoi de l'e-mail a échoué (directement). Faites en sorte que votre application s'en charge, c'est une valeur de retour valide (cela peut arriver). Le reste est le dépannage, mais d'abord faire fonctionner votre code avec le cas d'erreur. Par exemple. afficher un message indiquant que l'envoi de l'e-mail a échoué. – hakre

Répondre

-2

J'ai essayé le même script et j'ai reçu l'email. Mais, il est allé au dossier de spam. En-tête devrait avoir plus de détails. Vous pouvez vérifier le code de retour de la fonction mail pour vous assurer que la fonction a réussi. Voici la meilleure pratique.

  $boundary = "==MP_Bound_xyccr948x=="; 
     $headers = "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n"; 
     $headers .= "From: OrganizationName <[email protected]>\r\n"; 
     $headers .= "Return-path: [email protected]\r\n"; 


     $message = "This is a Multipart Message in MIME format\n"; 
     $message .= "--$boundary\n"; 
     $message .= "Content-Type: text/plain; charset=\"utf-8\"\n"; 
     $message .= "Content-Transfer-Encoding: 7bit\n\n"; 
     $message .= $user_entered_message . "\n"; 
     $message .= "--$boundary--"; 
     $mailsent = mail($to, $subject, $message, $headers, "[email protected]"); 

     if ($mailsent) 
     { 
     confirmation_msg(); 
     } 
     else 
     { 
     email_error_msg(); 
     } 
+0

J'ai vérifié mon dossier de spam plusieurs fois et il ne s'est jamais montré. Cela a-t-il fonctionné avant et après avoir ajouté les détails supplémentaires à l'en-tête, ou est-ce que cela l'a simplement fait passer du spam à la boîte de réception habituelle?Aussi quel est ce dernier paramètre dans la fonction mail() après l'en-tête, je ne l'ai jamais vu utilisé auparavant –

+0

Il est intéressant quelqu'un downvoted ma réponse même si j'ai fourni des détails clairs. bien ... @ZacharyElkins: J'ai couru le code juste comme vous avez posté et ai reçu l'email dans le dossier de Spam. La dernière fonction param in mail est d'obtenir la notification si l'email que vous avez envoyé est renvoyé. – alexa0417