wp_mail() no funciona en localhost

28 jul 2015, 10:17:53
Vistas: 15.3K
Votos: 2

Estoy intentando probar wp_mail() en mi entorno local. Cuando hago var_dump de wp_mail, obtengo un valor booleano false. Este es mi código:

    $to = "abcd@gmail.com";
    $subject = 'mi asunto';
    $message = 'Me gustaría trabajar contigo';
    $headers = '';


    $sent_message = wp_mail( $to, $subject, $message, $headers);
    var_dump($sent_message); // obtengo boolean false aquí
    if ( $sent_message ) {
        echo 'El mensaje de prueba fue enviado. Revisa tu bandeja de entrada.';
    } else {
        echo '¡El mensaje no fue enviado!'; // esto es lo que se imprime al final
    }

Cualquier ayuda sería apreciada.

0
Todas las respuestas a la pregunta 3
1

wp_mail() recurre a la función mail() de PHP, la cual requiere un MTA (Agente de Transferencia de Mensajes) configurado en tu servidor. Entonces, puedes instalar y configurar un MTA. Si estás utilizando un sistema operativo tipo Linux, SSMTP es una solución sencilla con la que puedes utilizar cualquier proveedor de correo para enviar los correos del sistema vía SMTP. Otro MTA sería Sendmail, un MTA completo pero difícil de configurar.

O simplemente puedes utilizar un plugin como WP Mail SMTP que implementa una conexión SMTP directa en PHP y evita el uso de mail().

28 jul 2015 10:38:06
Comentarios

Si solo quieres probar la funcionalidad de correo mientras desarrollas, puedes usar mailcatcher: https://mailcatcher.me No lo he probado en Windows, pero en Mac OS funciona. En otros sistemas operativos Linux también debería funcionar.

Luckyfella Luckyfella
24 ago 2017 22:56:38
1

Si alguien se encuentra con esta antigua pregunta:

En mi caso, la razón fue que le di al sitio en localhost un nombre sin un dominio de primer nivel. Por ejemplo, "misitio" (en lugar de "misitio.com"). Por lo tanto, WordPress asumió que la dirección "De" era "wordpress@misitio".

Phpmailer (que es llamado por wp_mail) luego mostró el error: "Dirección inválida: (De): wordpress@misitio"

La solución fue establecer explícitamente la dirección de origen mediante el encabezado:

    $headers[] = 'From: Wordpress<wordpress@misitio.com>';
    $sent_message = wp_mail( $to, $subject, $message, $headers );

Entonces wp_mail funcionó.

4 may 2021 21:49:36
Comentarios

¡Funciona bien. Buena solución!

Christer Fernstrom Christer Fernstrom
7 mar 2024 20:12:35
0

Ampliando la útil respuesta de Ronni, aquí te mostramos cómo puedes sobrescribir la dirección From: para todos los correos salientes:

if (defined('WP_CLI')) {
    WP_CLI::add_wp_hook('wp_mail_from', function () {
        return 'my@addr.com';
    });
} else {
    add_filter('wp_mail_from', function () {
        return 'my@addr.com';
    });
}

Para mi entorno de desarrollo local, encontré útil colocarlo en wp-config.php, al final del archivo, después de require_once ABSPATH . 'wp-settings.php';.

Se agregó una solución alternativa para wp-cli, ya que no proporciona add_filter() como lo haría WP normalmente.

30 sept 2022 06:47:31