J'ai récemment mis en place une zone de commentaires sur mon site Web et j'ai essayé de faire fonctionner la notification par e-mail. Il ne semble pas vouloir envoyer de notifications par e-mail lorsque de nouveaux commentaires sont faits.
Juste pour voir si PHP peut envoyer des emails, j'ai essayé de réinitialiser le mot de passe (car vous obtiendrez un nouveau mot de passe par mail), et j'ai reçu le message:
L'e-mail n'a pas pu être envoyé. Raison possible: votre hôte a peut-être désactivé la fonction mail ()
J'ai coché les cases dans Paramètres -> Discussion, et l'e-mail est valide, donc ce n'est pas un problème de configuration. J'ai essayé de créer un fichier PHP et d'envoyer en utilisant mail()
, et il a été envoyé avec succès. Il doit donc y avoir quelque chose de bizarre avec WordPress.
Des idées?
Réponses:
Étape par étape: recherchez d'abord le fichier dans lequel le message d'erreur apparaît. J'utilise Notepad ++ et la commande CTRL+ Fpour rechercher dans les fichiers. C'est une bonne idée de rechercher uniquement les premiers mots du message d'erreur, car certains messages d'erreur sont combinés de messages différents.
Votre message d'erreur apparaît dans
wp-login.php
et sainte chance, seulement là. Voyons donc pourquoi cette erreur peut se produire.Il y a deux conditions.
$message
doivent être vraies (pas une chaîne vide, pas fausse, pas nulle, etc.). Etwp_mail()
ne devrait pas retourner faux.Une ligne au-dessus, il y a un filtre
$message = apply_filters('retrieve_password_message', $message, $key);
, il est donc possible qu'un plugin (ou un thème) utilise ce filtre et retourne une valeur qui n'est pas vraie (chaîne vide, false, null, etc.).Mais il est beaucoup plus facile de vérifier si cela
wp_mail()
fonctionne ou non. Écrivez un petit plugin pour vous envoyer un mail de test:(Ceci est du code PHP5.3. Si vous utilisez PHP5.2, supprimez les choses d'espace de noms)
Le plugin doit envoyer un testmail immédiatement après l'activation. Sinon, appeler certaines pages backend (par exemple, un tableau de bord) devrait le faire.
Si le testmail n'arrive pas, vous avez probablement un problème avec
wp_mail()
. Activez donc le débogage:Mettez ce code dans votre
wp-config.php
et réessayez de vous envoyer un mail de test. Maintenant, vous devriez obtenir des messages d'erreur et ils doivent également être connectéswp-content/debug.log
(le journal de débogage peut devenir très volumineux s'il y a plus d'erreurs causées par des plugins et / ou des thèmes).À ce stade, vous avez obtenu de bonnes informations en cas d'
wp_mail()
échec et si oui, pourquoi. Si celawp_mail()
fonctionne correctement et que le testmail est arrivé, retournez en haut et découvrez pourquoi ce$message
n'est pas vrai.Si vous rencontrez des problèmes
wp_mail()
, n'oubliez pas que la fonctionwp_mail()
PHP n'est pas utiliséemail()
. WordPress utilise une classe PHP ( PHPMailer ). Peut-être avez-vous juste besoin d' un plugin pour utiliser SMTP au lieu de sendmail. Ou le problème se situe à un autre endroit. Nous ne le savons pas. Vous devez enquêter.la source
mail()
. Au moins dans certains cas (voir la ligne 732 danswp-includes/class-phpmailer.php
. Je n'ai pas accès au ftp atm mais j'essaierai vos suggestions dès que possible. Cela doit sûrement me conduire quelque part. Merci beaucoup!wp_mail()
et cela semble bien fonctionner, j'ai reçu le mail comme prévu. WP n'enverrait toujours pas les e-mails de commentaire / réinitialisation du mot de passe, et je n'ai rien trouvé dans le fichier journal (il n'a pas été créé), j'ai donc essayé d'installer un plug-in de messagerie SMTP et de créer un nouveau compte de messagerie pour Wordpress. Cela fonctionne maintenant mais je ne comprends toujours pas pourquoi il n'a pas pu envoyer avant. Merci!C'est un message d'erreur super ennuyeux car il pourrait y avoir beaucoup de choses, et il ne révèle pas l'erreur réelle (qui est souvent réduite au silence dans d'autres parties du code).
Cette erreur apparaît lorsque la
wp_mail()
fonction renvoie false, ce qui peut à son tour se produire siphpmailer->Send()
renvoie false ou déclenche une exception.Comment afficher les avertissements de la
mail()
fonction PHPCeux-ci sont normalement réduits au silence par défaut, mais malheureusement WordPress ne les capture jamais. Pour les afficher, il suffit d' enlever les
@
signes de@mail(...
danswp-includes/class-phpmailer.php
lamailPassthru()
fonction:Comment traquer d'autres causes possibles:
Ajoutez une seule ligne au bas de
wp_mail()
dans/wp-includes/pluggable.php
:Il affichera tous les détails de l'endroit où l'exception a été levée. Malheureusement, il inclut parfois ce message d'exception inutile: " Impossible d'instancier la fonction de messagerie ". Ouais merci WordPress, c'est vraiment utile.
En regardant l'exception, vous pouvez trouver le numéro de ligne de l'erreur et, espérons-le, remonter dans le code pour trouver la véritable cause.
Bonne chance. Espérons que WordPress améliore la gestion des erreurs de messagerie à un moment donné dans le futur.
la source
J'ai le même problème avec le serveur Ubuntu sur Amazon EC2.Je reçois un problème lors de l'utilisation du lien de réinitialisation du mot de passe et d'autres e-mails de notification ne fonctionnaient pas.
Voici donc des solutions qui ont fonctionné pour moi.Word-press a utilisé la
wp_mail()
fonction pour envoyer des e-mails qui ont besoin d'unePHPMailer
classe qui a utilisé php mailer stocké dans/usr/sbin/sendmail
.Utilisez d'abord cette fonction php simple pour vérifier le courrier php
Si cela ne fonctionne pas, vous devez installer php mailer. Utilisez cette commande pour installer la messagerie php sur le serveur Ubuntu.
Vérifiez ensuite les fonctions de messagerie électronique.
la source
Si les autres bonnes réponses ici ne vous aident pas, essayez ceci:
J'ai rencontré ce même problème et rien de ce que j'ai pu trouver dans les suggestions de WordPress ne l'a résolu pour moi.
Ensuite, j'ai commencé à rechercher si c'était l'installation PHP elle-même qui avait désactivé la fonction de messagerie, mais rien de tout cela n'a fonctionné non plus. Tout semblait avoir été configuré correctement.
Tous ces problèmes ont commencé pour moi une fois que j'ai mis à niveau mon serveur vers CentOS 7 qui utilise SELinux (Security Enhanced Linux) et ce que j'ai appris au cours des deux dernières semaines avec SELinux, c'est que si quelque chose ne fonctionne pas, mais tout ressemble à cela devrait fonctionner ... cela signifie que SELinux vous bloque silencieusement et secrètement en arrière-plan.
Et l'alto.
Si vous exécutez un système d'exploitation qui utilise SELinux, exécutez simplement la commande suivante en tant que root:
setsebool -P httpd_can_sendmail=1
Il existe un paramètre de sécurité qui empêche intrinsèquement le serveur Web d'envoyer des e-mails. Lorsque vous actionnez ce commutateur et dites à SELinux que le serveur Web peut envoyer des e-mails, tout fonctionne soudainement.
la source
J'ai rencontré ça aujourd'hui; dans mon cas, la situation s'est produite car le fichier d'hôtes du serveur a le même nom de domaine que l'adresse e-mail, pointant vers localhost. L'enregistrement mx pointe vers un autre serveur, mais le fichier hosts remplace DNS et WP essaie de remettre l'e-mail localement. La suppression du domaine du fichier hosts et le redémarrage de sendmail ont résolu ce problème.
la source
Je ne sais pas si cela vous concerne toujours ou non, mais comme il n'y a pas de réponse choisie, j'ai pensé me laisser essayer une fois.
En fait, j'avais fait face exactement au même problème depuis que mon hôte openshift a soudainement cédé aujourd'hui et a cessé d'envoyer des mails. En fouillant dans le code et le codex, j'ai découvert la fonction wp_mail () et finalement Google m'a conduit ici et j'ai vu comment elle pouvait être remplacée.
En s'appuyant sur la réponse de @ Ralf912, j'ai légèrement modifié le script pour que le code utilise l'API Web de sendgrid.com pour envoyer des e-mails au lieu de WordPress par défaut (que je présume:
Et ça a marché!
la source
J'ai eu la même erreur, les deux fonctions (mail et wp_mail) fonctionnaient, mais j'avais toujours cette erreur ennuyeuse. La correction a été très facile, mais il m'a fallu quelques heures pour en trouver la raison. Je partagerai donc ici ma solution sur le problème qui pourrait être (ou non) le même avec le vôtre.
J'ai essayé la fonction mail () et cela a fonctionné, mais lorsque vous le testez, vous ne spécifiez pas le dernier paramètre appelé «paramètres» dans la fonction mail (). Et WP l'utilise.
Donc, fondamentalement, ce paramètre ("[email protected]") avec l'indicateur "-f" permet à la fonction mail () de vérifier si l'adresse e-mail "[email protected]" figure dans la liste "e-mails de confiance".
Si ce n'est pas le cas, il retourne false, ce qui fait que wp_mail () retourne false et conduit au message d'erreur.
Donc, la solution est de demander à hoster de le faire pour vous, ou si vous utilisez cPanel, ajoutez simplement un compte de messagerie pour cette adresse et il l'ajoutera automatiquement dans la "liste de confiance".
la source
il a appelé -Gérer les e-mails enregistrés pour envoyer des e-mails via des scripts, c'est-à-dire (Wordpress)
la source
J'ai eu cette erreur pendant des siècles et j'ai essayé tant de solutions qui ne fonctionnaient pas. J'ai une installation Wordpress personnalisée sur AWS EC2. Tout d'abord, assurez-vous que votre courrier AWS SES est activé via le support, ils doivent être dans la même région (ou fermer) dans SES et EC2. J'ai utilisé la suite Google (gsuite) pour les e-mails pour recevoir / envoyer du courrier.
Assurez-vous que l'e-mail de test envoie AWS SES et Gsuite.
Installez le plugin Wordpress WP Mail SMTP, utilisez l'option "Autre SMTP", récupérez vos informations d'identification SMTP d'AWS SES, c'est là que je me suis retrouvé bloqué.
Vous devez activer la case à cocher "SSL" pour le cryptage, cela change le port à 465 pour moi. Enfin, mon test de courrier électronique a été envoyé avec succès par Worpdress.
la source