Controllare per verificare se wp_mail funziona correttamente?
-
-
Ora le restanti domande sono: Cos'è `mv_mail_token ()`e cosa restituiscee da dove viene la costante `sender_signature`e cosa contiene?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,ascolta,perfavoreprova a rispondere alle domande ... wp_mail_token () restituisce una stringae sender_signaturefabene.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
-
[gist debug] (https://gist.github.com/franz-josef-kaiser/4063197)[debug gist](https://gist.github.com/franz-josef-kaiser/4063197)
- 2
- 2013-06-24
- kaiser
-
5 risposta
- voti
-
- 2015-11-01
Wordpress si affida alla classe PHPMailerperinviaree-mailtramite lafunzione
mail
di PHP.Poiché lafunzione
mail
di PHP restituiscepochissimeinformazioni dopo l'esecuzione (solo TRUE o FALSE),suggerisco di ridurretemporaneamente alminimo lafunzionemv_optin_mail
per vedere se lefunzioniwp_mail
funzionano.Esempio:
$mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult;
Dato che haigiàtestato lafunzione
mail
di PHP,laposta dovrebbe arrivare.In caso contrario,ilproblema risiedenelle altreistruzioni dellatuafunzione onella classe PHPMailer.
In casi come questo,di solito rinomino lamiafunzionein qualcosa di simile:
function mv_optin_mail_backup( $id, $data ) {
E aggiungi unafunzionetemporanea con lo stessonome da usarein questomodo:
function mv_optin_mail( $id, $data ) { $mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult; }
Quando ho capito qual èilproblema,inizio dinuovo a utilizzare la versione dibackup.
Perinviare unamail utilizzando PHPMailer direttamentepuoifare qualcosa delgenere (nonper laproduzione,soloperil debug):
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
Puoi utilizzare l'azione "wp_mail_failed"per rilevare unerrore diinvio.
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
Quello che di solitofaccioper verificare se
wp_mail()
stainviando correttamente lee-mail è semplicemente registrarmi sulmio sito web con un altroindirizzoe-maile vedere se arriva l'e-mail.Se lofa,significa che WordPress stainviando correttamente lee-mail (utilizzawp_mail()
perinviare lee-mail di registrazione)e dovresti controllare latuafunzione diinvio dellapostapereventualierrori.Perfarlo,come suggerito da @Tobias,dovrestieliminaretutto dallafunzione diinvio dellapostae lasciare solo lefunzioni dibase:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
Inoltre,lee-mailinviate da WordPress (poichétutte lee-mailinviate dallafunzione
mail()
di PHPpotrebberoesserebloccate da alcuni server diposta (o contrassegnate come spam) quindi è sempreunabuonaidea usare SMTP (piùplugin che lofanno)per lee-mail sul sito web live.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
Inizierei abilitando WP_DEBUG in wp-confige vedrei se questomostra qualcosa sultuo codiceoil codiceper lafunzione wp_mail.Questo ètuttopereseguireil debugimmediatamente con WP.
Inoltre,puoi utilizzare Easy WP SMTP e abilitareil debuge/o configurarloper utilizzare SMTP.Ci sonoplugin simili su WordPress.orgma so che questo ha unabuona opzione di debug.Se qualcosa come GMailfunziona,saprai che è un'impostazione del servere non questo codice.
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
In questo documento c'erano suggerimentimoltointeressanti.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Inparticolare,lavorando con lamacchina virtuale di Azure,la configurazione di SELinuxbloccava le connessioniin uscita.
Se vedi unerrore come
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
,potrestiimbattertiin SELinux cheimpedisce PHP oil server Web dall'invio die-mail. Questo èparticolarmenteprobabile RedHat/Fedora/Centos. Usandoil comandogetsebool
possiamo controllare se il demone httpdpuò stabilire una connessione sulla retee invia un'e-mail:getsebool httpd_can_sendmail getsebool httpd_can_network_connect
Questo comando restituirà unbooleano attivato o disattivato. Se è disattivato,possiamo attivarlo:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
Se stai utilizzando PHP-FPMtramitefastcgi,tu potrebbeesserenecessario applicarlo al demonefpm invece che a 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.
Sto cercando di utilizzare
wp_mail
(test sullamacchina locale)manon viene ricevuta alcunaposta.php.ini
hasmtp_port = 25
impostatoe phpmail()
funzionafinora.Eccoil codice dellamiafunzione diposta:
Non ricevoerrori. C'è unmodoper attivare/disattivare la registrazione deglierroriper wordpress?
L '
noreply_address
ènoreply@root