Vérifier si wp_mail fonctionne correctement?
-
-
Maintenant,les questions restantes sont: Qu'est-ce que `mv_mail_token ()`et que renvoie-t-ilet d'où vient la constante `sender_signature`et que contient-elle?Now the remaining questions are: What is `mv_mail_token()` and what does it return and where does the constant `sender_signature` come from and what does it contain?
- 0
- 2013-06-23
- kaiser
-
Kaiser,écoutez,essayez de répondre aux questions ... wp_mail_token () renvoie une chaîneet sender_signaturefaitbien.Kaiser, listen, please try to answer the questions ... wp_mail_token() returns a string and sender_signature does at well.
- 1
- 2013-06-24
- helle
-
[debuggist] (https://gist.github.com/franz-josef-kaiser/4063197)[debug gist](https://gist.github.com/franz-josef-kaiser/4063197)
- 2
- 2013-06-24
- kaiser
-
5 réponses
- votes
-
- 2015-11-01
Wordpress s'appuie sur la classe PHPMailerpourenvoyer dese-mails via lafonction PHP
mail
.Étant donné que lafonction
mail
de PHP renvoietrèspeu d'informations après l'exécution (seulement TRUE ou FALSE),je suggère de réduiretemporairement votrefonctionmv_optin_mail
auminimum afin de voir si lesfonctionswp_mail
fonctionnent.Exemple:
$mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult;
Puisque vous avez déjàtesté lafonction
mail
de PHP,le courrier devrait arriver.Si cen'estpas le cas,leproblème réside dans les autresinstructions de votrefonction ou dans la classe PHPMailer.
Dans des cas comme celui-ci,je renommegénéralementmafonctionen quelque chose comme:
function mv_optin_mail_backup( $id, $data ) {
Et ajoutez unefonctiontemporaire avec lemêmenompourjouer avec comme ça:
function mv_optin_mail( $id, $data ) { $mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult; }
Unefois quej'aiidentifié leproblème,je recommence à utiliser la version de sauvegarde.
Pourenvoyer une-mailen utilisant PHPMailer directement,vouspouvezfaire quelque chose comme ceci (paspour laproduction,justepour le débogage):
add_action( 'phpmailer_init', 'my_phpmailer_example' ); function my_phpmailer_example( $phpmailer ) { $phpmailer->isSMTP(); //$phpmailer->Host = 'smtp.example.com'; // $phpmailer->SMTPAuth = true; // Force it to use Username and Password to authenticate $phpmailer->Port = 25; // $phpmailer->Username = 'yourusername'; // $phpmailer->Password = 'yourpassword'; // Additional settings… //$phpmailer->SMTPSecure = "tls"; // Choose SSL or TLS, if necessary for your server $phpmailer->setFrom( "[email protected]", "From Name" ); $phpmailer->addAddress( "[email protected]", "Your name" ); $phpmailer->Subject = "Testing PHPMailer"; $phpmailer->Body = "Hurray! \n\n Great."; if( !$phpmailer->send() ) { echo "Mailer Error: " . $phpmailer->ErrorInfo; } else { echo "Message sent!"; } }
Wordpress relies on the PHPMailer class to send email through PHP's
mail
function.Since PHP's
mail
function returns very little information after execution (only TRUE or FALSE), I suggest temporarily stripping down yourmv_optin_mail
function to a minimum in order to see if thewp_mail
functions works.Example:
$mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult;
Since you've tested PHP's
mail
function already, the mail should arrive.If it does not, the problem lies in the other statements of your function or in the PHPMailer class.
In cases like this, I usually rename my function to something like:
function mv_optin_mail_backup( $id, $data ) {
And add a temporary function with the same name to mess around with like so:
function mv_optin_mail( $id, $data ) { $mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult; }
When I have figured out what the problem is, I start using the backup version again.
To send a mail using PHPMailer directly you can do something like this (not for production, just for debugging):
add_action( 'phpmailer_init', 'my_phpmailer_example' ); function my_phpmailer_example( $phpmailer ) { $phpmailer->isSMTP(); //$phpmailer->Host = 'smtp.example.com'; // $phpmailer->SMTPAuth = true; // Force it to use Username and Password to authenticate $phpmailer->Port = 25; // $phpmailer->Username = 'yourusername'; // $phpmailer->Password = 'yourpassword'; // Additional settings… //$phpmailer->SMTPSecure = "tls"; // Choose SSL or TLS, if necessary for your server $phpmailer->setFrom( "[email protected]", "From Name" ); $phpmailer->addAddress( "[email protected]", "Your name" ); $phpmailer->Subject = "Testing PHPMailer"; $phpmailer->Body = "Hurray! \n\n Great."; if( !$phpmailer->send() ) { echo "Mailer Error: " . $phpmailer->ErrorInfo; } else { echo "Message sent!"; } }
-
- 2017-05-21
Vouspouvez utiliser l'action "wp_mail_failed"pour détecter uneerreur d'envoi.
https://developer.wordpress.org/reference/hooks/wp_mail_failed/
You can use the 'wp_mail_failed' action to catch a send error.
https://developer.wordpress.org/reference/hooks/wp_mail_failed/
-
- 2015-11-01
Ce queje fais habituellementpourtester si
wp_mail()
envoie correctement dese-mails,c'est simplementm'inscrire surmon site Web avec une autre adressee-mailet voir si l'e-mail arrive.Si c'est le cas,cela signifie que WordPressenvoie correctement lese-mails (il utilisewp_mail()
pourenvoyer lese-mails d'enregistrement)et vous devezinspecter votrefonction d'envoi de courrierpourtouteerreur.Pour cefaire,comme @Tobias l'a suggéré,vous deveztout supprimer de votrefonction d'envoi de courrieret ne laisser que lebasique:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
Deplus,lese-mailsenvoyéspar WordPress (commetous lese-mailsenvoyéspar lafonction PHP
mail()
peuvent êtrebloquéspar certains serveurs demessagerie (oumarqués comme spam) donc c'esttoujoursunebonneidée d'utiliser SMTP (plusieursplugins quifont cela)pour lese-mails sur le site Weben direct.What I usually do to test if
wp_mail()
is sending e-mails properly is just registering on my website with another e-mail address and seeing if the e-mail arrives. If it does, it means that WordPress is properly sending e-mails (it useswp_mail()
to send registration e-mails) and you should inspect your mail sending function for any errors. To do that, as @Tobias suggested, you should strip everything from your mail sending function and only leave the basic:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
Additionally, the e-mails sent by WordPress (as all e-mails sent by PHP's
mail()
function might be blocked by some e-mail servers (or marked as spam) so it's always a good idea to use SMTP (multiple plugins that do that) for e-mails on the live website. -
- 2014-04-22
Je commenceraispar activer WP_DEBUG dans wp-configet voir si cela vousmontre quelque chose sur votre codeou le code de lafonction wp_mail.C'est àpeuprèstoutpour le débogage dès la sortie de laboîte avec WP.
Vouspouvez également utiliser Easy WP SMTP et activer le débogageet/ou le configurerpour utiliser SMTP.Ilexiste desplugins similaires sur WordPress.orgmaisje sais que celui-ci a unebonne option de débogage.Si quelque chose comme GMailfonctionne,vous saurez qu'il s'agit d'unparamètre de serveuret non de ce code.
I would start by enabling WP_DEBUG in wp-config and see if that shows you anything about your code or the code for the wp_mail function. That is about it for debugging right out of the box with WP.
Also, you can use Easy WP SMTP and enable debugging and/or set that up to use SMTP. There are similar plugins on WordPress.org but I know this one has a good debug option. If something like GMail works then you'll know it is a server setting and not this code.
-
- 2020-04-14
Des suggestionstrèsintéressantesfiguraient dans ce document.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Entravaillanten particulier avec Azure Virtual Machine,la configuration SELinuxbloquait les connexions sortantes.
Si vous voyez uneerreur comme
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
,vous rencontrezpeut-être SELinuxempêchant PHP ou le serveur Web de l'envoi d'e-mails. Ceciestparticulièrementprobable sur RedHat/Fedora/Centos. En utilisant la commandegetsebool
,nouspouvons vérifier si le démon httpdest autorisé à établir une connexion sur le réseauet envoyer une-mail:getsebool httpd_can_sendmail getsebool httpd_can_network_connect
Cette commande retournera unbooléen activé ou désactivé. S'ilest désactivé,nouspouvons l'activer:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
Si vousexécutez PHP-FPM viafastcgi,vous peut avoirbesoin de l'appliquer au démonfpm plutôt qu'à httpd.
Very interesting suggestions were in this document.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
In particular working with Azure Virtual Machine the SELinux config was blocking the outgoing connections.
If you see an error like
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
, you may be running into SELinux preventing PHP or the web server from sending email. This is particularly likely on RedHat / Fedora / Centos. Using thegetsebool
command we can check if the httpd daemon is allowed to make a connection over the network and send an email:getsebool httpd_can_sendmail getsebool httpd_can_network_connect
This command will return a boolean on or off. If it's off, we can turn it on:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
If you're running PHP-FPM via fastcgi, you may need to apply this to the fpm daemon rather than httpd.
J'essaye d'utiliser
wp_mail
(test sur unemachine locale)mais aucunmailn'est reçu.php.ini
asmtp_port = 25
définiet lephpmail()
fonctionnejusqu'àprésent.Voici le code demafonctionmail:
Jen'obtiens aucuneerreur. Existe-t-il unmoyen d'activer lajournalisation deserreurspour wordpress?
noreply_address
estnoreply@root