¿Comprueba si wp_mail funciona correctamente?

2

Estoy tratando de usar wp_mail (probando en una máquina local) pero no se recibe correo. php.ini tiene smtp_port = 25 establecido y php mail() está funcionando hasta ahora.

  • ¿cómo puedo comprobar si wp_mail está funcionando?
  • lo que puede fallar

Aquí está el código de mi función de correo:

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' );
}

No obtengo ningún error. ¿Hay alguna manera de alternar el registro de errores para wordpress?

El noreply_address es [email protected]

    
pregunta helle 20.05.2013 - 12:43

4 respuestas

3

Wordpress se basa en la clase PHPMailer para enviar correo electrónico a través de la función mail de PHP.

Dado que la función mail de PHP devuelve muy poca información después de la ejecución (solo TRUE o FALSE), sugiero eliminar temporalmente su función mv_optin_mail para ver si funcionan las funciones wp_mail .

Ejemplo:

$mailResult = false;
$mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' );
echo $mailResult;

Ya que ya has probado la función mail de PHP, el correo debería llegar.

Si no lo hace, el problema radica en las otras declaraciones de su función o en la clase PHPMailer.

En casos como este, normalmente cambio el nombre de mi función a algo como:

function mv_optin_mail_backup( $id, $data ) {

Y agrega una función temporal con el mismo nombre para jugar así con como:

function mv_optin_mail( $id, $data ) {
    $mailResult = false;
    $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' );
    echo $mailResult;
}

Cuando haya descubierto cuál es el problema, vuelvo a usar la versión de copia de seguridad.

Para enviar un correo usando PHPMailer directamente, puedes hacer algo como esto (no para producción, solo para depuración):

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!";
    }                       

}       
    
respondido por el Tobias Beuving 01.11.2015 - 15:40
4

Puedes usar la acción 'wp_mail_failed' para detectar un error de envío.

enlace

    
respondido por el gbones 21.05.2017 - 08:21
3

Lo que normalmente hago para comprobar si wp_mail() está enviando correos electrónicos correctamente es simplemente registrarme en mi sitio web con otra dirección de correo electrónico y ver si el correo electrónico llega. Si lo hace, significa que WordPress está enviando correos electrónicos correctamente (usa wp_mail() para enviar correos electrónicos de registro) y debe inspeccionar su función de envío de correo para detectar errores. Para hacer eso, como sugirió @Tobias, debes quitar todo de tu función de envío de correo y solo dejar lo básico:

function wpse_100047() {
    echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' );
}

Además, los correos electrónicos enviados por WordPress (como todos los correos electrónicos enviados por la función mail() de PHP podrían estar bloqueados por algunos servidores de correo electrónico (o estar marcados como spam), por lo que siempre es una buena idea usar SMTP ( múltiples complementos que hacen eso) para correos electrónicos en el sitio web en vivo.

    
respondido por el Mateusz Hajdziony 01.11.2015 - 16:58
2

Comenzaría por habilitar WP_DEBUG en wp-config y veré si eso muestra algo sobre su código o el código para el Función wp_mail. Eso es todo para la depuración de la caja con WP.

Además, puede usar Easy WP SMTP y habilitar la depuración y / o configurarlo para que use SMTP. Hay complementos similares en WordPress.org pero sé que este tiene una buena opción de depuración. Si algo como GMail funciona, sabrá que es una configuración de servidor y no este código.

    
respondido por el andrewteg 22.04.2014 - 03:44

Lea otras preguntas en las etiquetas