Verifique para verificar se o wp_mail está funcionando corretamente?

2

Estou tentando usar wp_mail (teste na máquina local), mas nenhum email é recebido. O php.ini tem smtp_port = 25 set e o php mail() está funcionando até agora.

  • como posso verificar se o wp_mail está funcionando
  • o que pode falhar

Aqui está o código da minha função de e-mail:

function mv_optin_mail($id, $data){

    $url = $id."-".mv_mail_token($id, $data['token']);

    add_filter( 'wp_mail_content_type', 'set_html_content_type' );
    add_filter( 'wp_mail_charset', 'utf8' );

    $headers[] = 'From: '.sender_signature.' <'.noreply_address.'>';    

    ob_start();
    include("optin-mail.php");
    $html_mail = ob_get_contents();
    ob_end_clean();

    wp_mail( $data['email'], 'Some Subject', $html_mail, $headers );
    remove_filter( 'wp_mail_content_type', 'set_html_content_type' );
    remove_filter( 'wp_mail_charset', 'utf8' );
}

Não recebo erros. Existe uma maneira de alternar error-loggin para wordpress?

O noreply_address é noreply@root

    
por helle 20.05.2013 / 12:43

4 respostas

3

O Wordpress confia na classe PHPMailer para enviar e-mail através da função mail do PHP.

Como a função mail do PHP retorna muito pouca informação após a execução (apenas VERDADEIRO ou FALSO), sugiro que você desative temporariamente a função mv_optin_mail para ver se as funções wp_mail funcionam.

Exemplo:

$mailResult = false;
$mailResult = wp_mail( 'youremail@bla.com', 'test if mail works', 'hurray' );
echo $mailResult;

Como você já testou a função mail do PHP, o e-mail deve chegar.

Se isso não acontecer, o problema está nas outras instruções da sua função ou na classe PHPMailer.

Em casos como esse, geralmente renomeio minha função para algo como:

function mv_optin_mail_backup( $id, $data ) {

Adicione uma função temporária com o mesmo nome para mexer com algo assim:

function mv_optin_mail( $id, $data ) {
    $mailResult = false;
    $mailResult = wp_mail( 'youremail@bla.com', 'test if mail works', 'hurray' );
    echo $mailResult;
}

Quando eu descobri qual é o problema, começo a usar a versão de backup novamente.

Para enviar um email usando o PHPMailer diretamente, você pode fazer algo assim (não para produção, apenas para depuração):

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( "fromemail@bla.com", "From Name" );
    $phpmailer->addAddress( "youremail@bla.com", "Your name" );
    $phpmailer->Subject    = "Testing PHPMailer";           
    $phpmailer->Body     = "Hurray! \n\n Great.";
    if( !$phpmailer->send() ) {
        echo "Mailer Error: " . $phpmailer->ErrorInfo;
    } else {
        echo "Message sent!";
    }                       

}       
    
por Tobias Beuving 01.11.2015 / 15:40
4

Você pode usar a ação 'wp_mail_failed' para capturar um erro de envio.

enlace

    
por gbones 21.05.2017 / 08:21
3

O que eu costumo fazer para testar se wp_mail() está enviando e-mails corretamente é apenas registrar no meu site com outro endereço de e-mail e ver se o e-mail chega. Se isso acontecer, significa que o WordPress está enviando e-mails adequadamente (usa wp_mail() para enviar e-mails de registro) e você deve inspecionar sua função de envio de e-mail em busca de erros. Para fazer isso, como sugerido pelo @Tobias, você deve retirar tudo da sua função de envio de e-mails e deixar apenas o básico:

function wpse_100047() {
    echo wp_mail( 'youremail@example.com', 'WP Mail Test', 'Mail is working' );
}

Além disso, os e-mails enviados pelo WordPress (como todos os e-mails enviados pela função mail() do PHP podem estar bloqueados por alguns servidores de e-mail (ou marcados como spam), então é sempre bom usar o SMTP vários plugins que fazem isso) para e-mails no site ao vivo.

    
por Mateusz Hajdziony 01.11.2015 / 16:58
2

Eu começaria ativando o WP_DEBUG no wp-config e verificaria se isso mostra alguma coisa sobre o seu código ou o código do função wp_mail. Isso é para depurar diretamente da caixa com o WP.

Além disso, você pode usar o Easy WP SMTP e habilitar a depuração e / ou configurar isso para usar o SMTP. Existem plugins semelhantes no WordPress.org, mas eu sei que este tem uma boa opção de depuração. Se algo como GMail funcionar, você saberá que é uma configuração de servidor e não esse código.

    
por andrewteg 22.04.2014 / 03:44

Tags