La fonction de messagerie PHP ne peut pas envoyer complètement d'e-mails
P粉340264283
2023-08-29 11:27:53
<p><br /></p>
<pre class="brush:php;toolbar:false;"><?php
$nom = $_POST['nom'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'De : votresite.com' ;
$to = 'contact@votresite.com';
$subject = 'Demande client';
$body = "De : $namen E-Mail : $emailn Message :n $message" ;
si ($_POST['soumettre']) {
if (mail ($à, $sujet, $body, $from)) {
echo '<p>Votre message a été envoyé !</p>';
} autre {
echo '<p> Quelque chose s'est mal passé, revenez en arrière et réessayez !</p>';
}
}
?>≪/pré>
<p>J'essaie de créer un formulaire de courrier électronique simple. Le formulaire lui-même se trouve sur ma page <code>index.html</code>, mais il est soumis à une page distincte "Merci pour votre soumission", <code>thankyou.php</code>, qui contient ce qui précède. PHP intégré dans le code.
Le code est parfaitement soumis, mais l'e-mail n'est jamais envoyé. Comment puis-je résoudre ce problème? </p>
Bien que certaines parties de cette réponse ne s'appliquent qu'à l'utilisation de la fonction
mail()
elle-même, bon nombre de ces étapes de dépannage peuvent être appliquées à n'importe quel système de messagerie PHP. 嗯>Il existe plusieurs raisons pour lesquelles votre script n'envoie pas l'e-mail. À moins d’une erreur de syntaxe évidente, il est difficile de diagnostiquer ces problèmes. Sinon, vous devrez parcourir la liste de contrôle ci-dessous pour rechercher les pièges potentiels que vous pourriez rencontrer.
Assurez-vous que le rapport d'erreurs est activé et configuré pour signaler toutes les erreurs
Le rapport d'erreurs est crucial pour éliminer les bogues dans votre code et les erreurs générales rencontrées avec PHP. Le rapport d'erreurs doit être activé pour recevoir ces erreurs. Placer le code suivant en haut de votre fichier PHP (ou dans le fichier de configuration principal) permettra le rapport d'erreurs.
Voir Comment obtenir des messages d'erreur utiles en PHP ? — Cette réponse pour plus de détails.
Assurez-vous d'appeler la fonction
mail()
Cela peut sembler idiot, mais une erreur courante consiste à oublier de placer la fonction
mail()
dans votre code. Assurez-vous qu'il est là et qu'il n'est pas commenté.Assurez-vous d'appeler correctement la
mail()
fonctionLa fonction mail prend trois paramètres obligatoires et un quatrième et un cinquième paramètre facultatifs. Si votre appel à
mail()
n’a pas au moins trois arguments, il échouera.Si votre appel à
mail()
ne fournit pas les bons arguments dans le bon ordre, il échouera également.Vérifiez le journal de messagerie du serveur
Votre serveur Web doit enregistrer toutes les tentatives d'envoi d'e-mails via celui-ci. L'emplacement de ces journaux varie (vous devrez peut-être demander à l'administrateur de votre serveur où ils se trouvent), mais ils se trouvent généralement sous
logs
dans le répertoire racine de l'utilisateur. À l’intérieur se trouvera le message d’erreur signalé par le serveur (le cas échéant) lié à votre tentative d’envoi de l’e-mail.Vérifiez si la connexion au port échoue
Le blocage de port est un problème très courant auquel la plupart des développeurs sont confrontés lors de l'intégration de code pour envoyer des e-mails via SMTP. Et cela peut être facilement retracé dans le journal de messagerie du serveur (l'emplacement du serveur de journal de messagerie peut varier d'un serveur à l'autre, comme mentionné ci-dessus). Si vous êtes sur un serveur d'hébergement mutualisé, les ports 25 et 587 sont toujours bloqués par défaut. Ce blocage est effectué intentionnellement par votre hébergeur. Cela est vrai même pour certains serveurs dédiés. Lorsque ces ports sont bloqués, essayez de vous connecter en utilisant le port 2525. Si vous constatez que le port est également bloqué, alors la seule solution est de contacter votre hébergeur pour débloquer ces ports.
La plupart des fournisseurs d'hébergement bloquent ces ports de messagerie pour protéger leur réseau de tout spam envoyé.
Utilisez le port 25 ou 587 pour les connexions normales/TLS et le port 465 pour les connexions SSL. Pour la plupart des utilisateurs, il est recommandé d'utiliser le port 587 pour éviter les limites de débit fixées par certains fournisseurs d'hébergement.
N'utilisez pas d'opérateurs de suppression d'erreurs
Lorsque l'Error Suppression Operator
@
est ajouté avant une expression en PHP, tous les messages d'erreur pouvant être générés par cette expression seront ignorés. Il existe certaines situations où cet opérateur est nécessaire, mais l'envoi d'un message n'en fait pas .Si votre code contient
@mail(...)
,那么您可能隐藏了有助于您调试的重要错误消息。删除@
et voyez si des erreurs sont signalées.Uniquement si vous utilisez
error_get_last()
immédiatement suite à une panne spécifique.Vérifiez
mail()
la valeur de retourmail()
Fonction :Cela mérite d'être noté car :
FALSE
, vous savez que l'erreur vient du fait que votre serveur accepte votre courrier. Il ne s'agit peut-être pas d'un problème de codage mais d'un problème de configuration du serveur. Vous devez contacter votre administrateur système pour savoir pourquoi cela se produit.TRUE
, cela ne signifie pas que votre e-mail sera envoyé. Cela signifie simplement que l'e-mail a été envoyé avec succès via PHP au gestionnaire approprié sur le serveur. Il existe de nombreux autres points de défaillance indépendants de la volonté de PHP qui peuvent empêcher l'envoi d'e-mails.Donc,
ne signifie pas nécessairement que votre e-mail a été envoyé avec succès. Cela vaut la peine d’être noté !FALSE
将帮助您指明正确的方向,而TRUE
vous aidera à vous orienter dans la bonne direction, tandis quePour éviter que les e-mails envoyés via PHP ne soient envoyés dans le dossier spam du destinataire, vous pouvez faire un certain nombre de choses dans votre code PHP ou autrement pour minimiser les risques que votre e-mail soit marqué comme spam. Les bons conseils de Michiel de Mare
incluent : 🎜Pour plus d'informations sur ce sujet, consultez Comment s'assurer que les e-mails envoyés par programmation ne sont pas automatiquement marqués comme spam ? .
Assurez-vous de fournir tous les en-têtes de courrier électronique
Certains logiciels anti-spam rejetteront les messages s'il leur manque des en-têtes courants tels que « De » et « Répondre » :
Assurez-vous qu'il n'y a pas d'erreurs grammaticales dans l'en-tête de l'e-mail
Les en-têtes invalides sont tout aussi mauvais que l'absence d'en-tête du tout. Un caractère incorrect peut faire dérailler votre email. Veuillez vérifier à nouveau que votre syntaxe est correcte, car PHP ne détectera pas ces erreurs à votre place.
N'utilisez pas de faux
发件人:
expéditeursBien que le message doive avoir From:Sender, vous ne pouvez pas simplement utiliser n'importe quelle valeur. En particulier, les adresses d'expéditeur fournies par les utilisateurs constituent un moyen fiable de bloquer les messages :
Cause : Votre réseau ou serveur de courrier sortant n'est pas sur liste blanche SPF/DKIM et ne peut pas prétendre être responsable des adresses @hotmail ou @gmail. Il peut même supprimer silencieusement les messages provenant de domaines d'expéditeur
From:
non configurés.Assurez-vous que la valeur du destinataire est correcte
Parfois, le problème est aussi simple que la valeur incorrecte du destinataire de l'e-mail. Cela peut être dû à l'utilisation de variables incorrectes.
Une autre façon de tester ce problème consiste à coder en dur la valeur du destinataire dans l'appel de fonction
mail()
:Cela peut être appliqué à tous les
mail()
paramètres.Envoyer à plusieurs comptes
Pour vous aider à résoudre les problèmes de compte de messagerie, envoyez votre e-mail à plusieurs comptes de messagerie auprès de différents fournisseurs de messagerie. . Si votre e-mail n'atteint pas le compte Gmail de l'utilisateur, envoyez le même e-mail à un compte Yahoo, un compte Hotmail et un compte POP3 classique (tel que le compte de messagerie fourni par votre FAI).
Si les e-mails arrivent sur tout ou partie des autres comptes de messagerie, vous savez que votre code envoie des e-mails, mais le fournisseur du compte de messagerie peut les bloquer pour une raison quelconque. Si l'e-mail n'arrive sur aucun compte de messagerie, le problème est probablement lié à votre code.
Assurez-vous que le code correspond à la méthode du formulaire
Si vous avez défini la méthode du formulaire pour
POST
,请确保使用$_POST
查找表单值。如果您已将其设置为GET
或根本没有设置,请确保使用$_GET
recherchez la valeur du formulaire.Assurez-vous que les
action
valeurs de votre formulaire pointent vers le bon emplacementAssurez-vous que l'attribut de votre formulaire
action
contient une valeur pointant vers votre code mail PHP.