Eu recentemente implementei uma área de comentários no meu site e tentei fazer a notificação por email funcionar. Parece que não deseja enviar notificações por email quando novos comentários são feitos.
Apenas para ver se o PHP pode enviar e-mails, tentei redefinir a senha (porque você receberá uma nova senha por e-mail) e recebi a mensagem:
Não foi possível enviar o email. Possível motivo: seu host pode ter desativado a função mail ()
Marquei as caixas de seleção em Configurações -> Discussão, e o email é válido, portanto não é um problema de configuração. Eu tentei criar um arquivo PHP e enviar usando mail()
, e ele foi enviado com sucesso. Portanto, deve haver algo estranho acontecendo com o WordPress.
Alguma ideia?
Respostas:
Passo a passo: Primeiro encontre o arquivo em que a mensagem de erro aparece. Eu uso o Notepad ++ e o comando CTRL+ Fpara pesquisar em arquivos. É uma boa ideia pesquisar apenas as primeiras palavras da mensagem de erro, porque algumas mensagens de erro são combinadas com mensagens diferentes.
Sua mensagem de erro aparece
wp-login.php
e com sorte, somente lá. Então, vejamos por que esse erro pode ocorrer.Existem duas condições.
$message
precisa ser verdadeiro (não é uma string vazia, não é falsa, não é nula, etc.). Ewp_mail()
não deve retornar falso.Uma linha acima, há um filtro
$message = apply_filters('retrieve_password_message', $message, $key);
, portanto, é possível que um plug-in (ou tema) use esse filtro e retorne um valor que não é verdadeiro (string vazia, false, null, etc.).Mas é muito mais fácil verificar se
wp_mail()
está funcionando ou não. Escreva um pequeno plugin para enviar um email de teste para si mesmo:(Este é o código PHP5.3. Se você estiver executando o PHP5.2, remova as coisas do espaço para nome)
O plug-in deve enviar um email de teste imediatamente após a ativação. Caso contrário, chamar algumas páginas de back-end (por exemplo, painel) deve fazê-lo.
Se o testmail não chegar, provavelmente você está com um problema
wp_mail()
. Então ative a depuração:Coloque esse código no seu
wp-config.php
e tente enviar um teste para si mesmo. Agora você deve receber algumas mensagens de erro e elas também devem estar logadaswp-content/debug.log
(o log de depuração pode aumentar muito se houver mais erros causados por plug-ins e / ou temas).Nesse ponto, você tem boas informações se
wp_mail()
falhar e, se sim, por quê. Sewp_mail()
funcionar corretamente e o testmail chegar, volte ao topo e descubra por que isso$message
não é verdade.Se você tiver problemas
wp_mail()
, lembre-se de quewp_mail()
não usa amail()
função PHP . O WordPress usa uma classe PHP ( PHPMailer ). Talvez você só precise de um plugin para usar SMTP em vez de sendmail. Ou o problema está localizado em outro local. Nós não sabemos. Você tem que investigar.fonte
mail()
. Pelo menos em alguns casos (consulte a linha 732 polwp-includes/class-phpmailer.php
. Eu não tenho acesso ao ftp atm, mas tentarei suas sugestões o mais rápido possível. Certamente isso deve me levar a algum lugar. Muito obrigado!wp_mail()
e parece funcionar bem, recebi o email conforme o esperado. O WP ainda não enviava os emails de comentário / redefinição de senha e como não recebi nada no arquivo de log (não foi criado), tentei instalar um plug-in de email SMTP e configurar uma nova conta de email para Wordpress. Funciona agora, mas ainda não entendo por que não foi possível enviar antes. Obrigado!Essa é uma mensagem de erro super irritante, pois pode haver muitas coisas e não revela o erro real (que geralmente é silenciado em outras partes do código).
Este erro aparece quando a
wp_mail()
função retorna false, o que por sua vez pode ocorrer sephpmailer->Send()
retornar false ou gerar uma exceção.Como exibir avisos da
mail()
função do PHPNormalmente, eles são silenciados por padrão, mas infelizmente o WordPress nunca os captura. Para mostrá-los, basta remover os
@
sinais de@mail(...
dentrowp-includes/class-phpmailer.php
namailPassthru()
função:Como caçar outras causas possíveis:
Adicione uma única linha ao final de
wp_mail()
em/wp-includes/pluggable.php
:Ele irá despejar todos os detalhes de onde a exceção foi gerada. Infelizmente, às vezes, inclui esta mensagem de exceção inútil: " Não foi possível instanciar a função de email ". Sim, graças ao WordPress, isso é realmente útil.
Observando a exceção, você pode encontrar o número da linha do erro e, esperançosamente, rastrear o código de volta ao código para encontrar a causa real.
Boa sorte. Esperamos que o WordPress melhore o tratamento de erros de e-mail em algum momento no futuro.
fonte
Eu tenho o mesmo problema com o servidor Ubuntu no Amazon EC2. Eu recebo um problema ao usar o link de redefinição de senha e também outros emails de notificação não estavam funcionando.
Então, aqui estão as soluções que funcionaram para mim: o Word-press usou a
wp_mail()
função para enviar e-mails que precisam dePHPMailer
classe em que o php mailer armazenado é armazenado/usr/sbin/sendmail
.Use esta função php simples primeiro para verificar o php mail
Se isso não estiver funcionando, você precisará instalar o php mailer. Use este comando para instalar o php mail no servidor Ubuntu.
Em seguida, verifique as funções de email do word-press.
fonte
Se as outras ótimas respostas aqui não ajudarem, tente o seguinte:
Encontrei esse mesmo problema e nada que eu encontrei em nenhuma das sugestões para o WordPress resolveu o problema para mim.
Então comecei a investigar se era a própria instalação do PHP que havia desativado a função mail, mas nada disso funcionava também. Tudo parecia estar configurado corretamente.
Todos esses problemas começaram para mim depois que atualizei meu servidor para o CentOS 7, que usa o SELinux (Security Enhanced Linux), e o que aprendi nas últimas duas semanas com o SELinux é que, se algo não está funcionando, mas tudo parece deveria estar funcionando ... isso significa que o SELinux está silenciosamente e secretamente bloqueando você em segundo plano.
E viola.
Se você estiver executando e o SO que utiliza o SELinux, execute o seguinte comando como root:
setsebool -P httpd_can_sendmail=1
Há uma configuração de segurança que impede inerentemente o servidor da web de enviar email. Quando você aciona essa opção e diz ao SELinux que está ok para o servidor da web enviar email, tudo de repente funciona.
fonte
Eu encontrei isso hoje; no meu caso, a situação aconteceu porque o arquivo hosts do servidor tem o mesmo nome de domínio do endereço de email, apontando para localhost. O registro mx aponta para um servidor diferente, mas o arquivo hosts está substituindo o DNS e o WP está tentando entregar o email localmente. A remoção do domínio do arquivo hosts e a reinicialização do sendmail resolveram esse problema.
fonte
Não sei se isso ainda é relevante para você ou não, mas como não há resposta escolhida, pensei em tentar uma vez.
Na verdade, eu havia enfrentado exatamente o mesmo problema desde que meu host de turno de repente cedeu hoje e parou de enviar e-mails. Pesquisando o código e o códice, conheci a função wp_mail () e, finalmente, o google me levou até aqui, e vi como ela poderia ser substituída.
Com base na resposta de @ Ralf912, modifiquei um pouco o script para que o código use a API da web do sendgrid.com para enviar e-mails em vez do wordpress padrão (que eu presumo:
E funcionou!
fonte
Eu tive o mesmo erro, ambas as funções (mail e wp_mail) funcionaram, mas ainda tinha esse erro irritante. A correção foi muito fácil, mas levei algumas horas para encontrar o motivo. Então, compartilharei aqui minha solução sobre o problema que pode ser (ou não) o mesmo com o seu.
Tentei a função mail () e funcionou, mas quando você a testou, não especifica o último parâmetro chamado 'parameters' na função mail (). E o WP usa.
Portanto, basicamente, esse parâmetro ("[email protected]") com o sinalizador "-f" faz com que a função mail () verifique se o endereço de email "[email protected]" está listado na lista "emails confiáveis".
Portanto, se isso não ocorrer, ele retornará false, o que faz com que wp_mail () retorne false e leve à mensagem de erro.
Portanto, a solução é solicitar ao hoster que faça isso por você, ou se você estiver usando o cPanel, basta adicionar uma conta de e-mail para este endereço e ele será automaticamente adicionado à "lista confiável".
fonte
chamou -Gerenciar IDs de e-mail registrados para enviar e-mails via scripts, isto é, (Wordpress)
fonte
Eu tive esse erro por séculos e tentei tantas soluções que não funcionaram. Eu tenho uma instalação personalizada do Wordpress no AWS EC2. Primeiro, verifique se o seu email do AWS SES está habilitado pelo suporte, eles devem estar na mesma região (ou fechar) no SES e no EC2. Eu usei o Google suite (gsuite) como email para receber / enviar email.
Verifique se o email de teste é enviado no AWS SES e Gsuite.
Instale o plug-in Wordpress WP Mail SMTP, use a opção "Other SMTP", pegue suas credenciais SMTP na AWS SES, foi aqui que fiquei preso.
Você deve ativar a caixa de seleção "SSL" para Criptografia, isso altera a porta para 465 para mim. Por fim, meu teste de e-mail foi enviado pelo Worpdress com sucesso.
fonte