Verifique se o WP_MAIL está funcionando corretamente?
-
-
Agora asperguntas restantes são: o que é `mv_mail_token ()e o queele retornae onde vem a constante` sender_signature` venhae o queele contém?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,ouça,porfavor,tente responder àsperguntas ... WP_Mail_Token () Retorna uma stringe Sender_signaturefazbem.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
-
[Debug Gist] (https://gist.github.com/franz-josef-kaiser/4063197)[debug gist](https://gist.github.com/franz-josef-kaiser/4063197)
- 2
- 2013-06-24
- kaiser
-
5 respostas
- votos
-
- 2015-11-01
WordPress depende da classe Phpmailerparaenviare-mail através dafunção .
Como afunção
de PHP Retornamuitopoucainformação após aexecução (somente verdadeira oufalsa),sugiro descascandotemporariamente o seu mv_optin_mail
para ummínimopara ver se OWP_MAIL FUNÇÕESfunciona. Exemplo:
$mailresult=false; $mailresult=wp_mail ('[email protected]','teste se o correiofunciona','Hurray'); echo $mailresult;
Desde que vocêtestou o Mail
PHP
Função,o correio deve chegar.Senãofor,oproblema residenas outras declarações de suafunção ouna classe Phpmailer.
Em casos comoeste,geralmente renomeiminhafunçãopara algo como:
funçãomv_optin_mail_backup ($ ID,$ Data) {
e adicione umafunçãotemporária com omesmonomeparamexer com assim:
Função MV_OPTIN_MAIL ($ ID,$ Data) { $mailresult=falso; $mailresult=wp_mail ('[email protected]','teste se o correiofunciona','Hurray'); echo $mailresult; }
Quandoeu descobri qual é oproblema,comeco a usar a versão debackupnovamente.
Paraenviar umemail usando o Phpmailer diretamente vocêpodefazer algo assim (nãoparaprodução,apenaspara depuração):
Add_action ('phpmailer_init','my_phpmailer_example'); funçãomy_phpmailer_example ($phpmailer) { $phpmailer- >issmtp (); //$phpmailer- > host='smtp.example.com'; //$phpmailer- > smtpauth=true;//force a utilização denome de usuárioe senhapara autenticar $phpmailer- >port=25; //$phpmailer- > username='yourusername'; //$phpmailer- > senha='yourpassword'; //Configurações adicionais… //$phpmailer- > smtpsecure="tls";//Escolha SSL ou TLS,senecessáriopara o seu servidor $phpmailer- > setFrom ("[email protected]","donome"); $phpmailer- > addaddress ("[email protected]","seunome"); $phpmailer- > sujeito="testandophpmailer"; $phpmailer- > corpo="hurra! \n \n grande."; Se (! $phpmailer- >enviar ()) { Echo "Erro domailer:". $phpmailer- >errorInfo; } outro { eco "enviado!"; } }
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
Vocêpode usar a ação 'wp_mail_failed'parapegar umerro deenvio.
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
O que costumofazerparatestar se
wp_mail()
estáenviandoe-mails corretamenteestá se registrandonomeu site com outroendereço dee-maile ver se oe-mail chegar.Seisso acontecer,significa que o WordPressestáenviando corretamentee-mails (usawp_mail()
paraenviare-mails de registro)e você deveinspecionar suafunção deenvio deemailpara quaisquererros.Parafazerisso,como @tobias sugeriu,você devetirartudo da suafunção deenvio deemaile só deixe obásico:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
Além disso,ose-mailsenviadospelo WordPress (comotodos ose-mailsenviadospelo correio
mail()
podem serbloqueadospor alguns servidores dee-mail (oumarcados como spam)para que seja sempreUmaboaideia usar SMTP (váriosplugins quefazemisso)parae-mailsno site ao vivo.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
Eu começaria ativando wp_debug no wp-confige veja seissomostra alguma coisa sobre o seu códigoou o códigopara afunção WP_Mail.Isso é sobreissopara depurar logofora da caixa com WP.
Além disso,vocêpode usar Easy WP SMTP e ativar a depuraçãoe/ou definirissopara usar o SMTP.Háplugins semelhantesno WordPress.org,maseu sei queestetem umaboa opção de depuração.Se algoparecido com o Gmailfunciona,você saberá que é uma configuração de servidore nãoeste código.
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
Sugestõesmuitointeressantesforamneste documento.
https://github.com/phpmailer/phpmailer/wiki/troubleshooting
Emparticulartrabalhando com amáquina virtual do Azure,a configuração do SELinuxestavabloqueando as conexões de saída.
.
Se você vir umerro como
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
,vocêpodeestar correndopara o Selinuxevitando PHP ou o servidor da Web doenvio deemail. Isso éparticularmenteprovável REDHAT/FEDORA/CENTOS. Usando o comandogetsebool
podemos verificar se O daemon httpdpodefazer uma conexãopela redee Enviar umemail:getsebool httpd_can_sendmail getsebool httpd_can_network_connect
Este comando retornará umbooleano ligado ou desligado. Seestiver desligado,podemos ligá-loem:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
Se vocêestáexecutando o PHP-FPM viafastcgi,você podeprecisar aplicarisso ao daemon do FPMem vez de 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.
Estoutentando usar
wp_mail
(testandonamáquina local),masnenhume-mail é recebido. Ophp.ini temsmtp_port=25
Sete oemail do PHP()
estáfuncionando até agora.Aquiestá o código daminhafunção dee-mail:
Eunão receboerros. Existe umamaneira de alternar oerro deerropara o WordPress?
o
noreply_address
énoreply @ raiz