Cómo enviar un correo usando wp_mail y usar más de un BCC en la cabecera

2 jun 2015, 18:02:27
Vistas: 56.2K
Votos: 6

Tengo esta parte del código que se encarga de obtener las variables del formulario de contacto y enviar un correo electrónico a mí y a mis compañeros de trabajo.

add_action('wp_ajax_nopriv_submit_contact_form', 'submit_contact_form'); 
// Enviar información desde el formulario de contacto
function submit_contact_form(){

    // Si existe $_POST['email']...
    if( isset($_POST['email']) && ($_POST['validation'] == true ) ) {

        $email = $_POST['email'];       
        $email_to = "aaaa@example.pro";
        $fullname = $_POST['fullname'];
        $headers = 'From: '. $fullname .' <'. $email .'>' . "\r\n";
        $group_emails = array(
            'bbb@example.com', 
            'ccc@example.com', 
            'ddd@example.com', 
            'eee@example.pro', 
            'fff@example.pro' 
            );
        $email_subject = "example intro: $email";
        $message = $_POST['text']; 

        if(wp_mail($group_emails,$email_subject,$message,$headers)) {
            echo json_encode(array("result"=>"complete"));
        } else {
            echo json_encode(array("result"=>"mail_error"));
            var_dump($GLOBALS['phpmailer']->ErrorInfo);
    }
        wp_die();
    }
}

Quiero añadir 4 correos electrónicos como BCC en las cabeceras.

¿Cómo puedo hacer esto correctamente? He intentado algunas variaciones al escribirlo sin éxito.

0
Todas las respuestas a la pregunta 1
3

$headers puede ser un string o un array, pero puede ser más fácil de usar en forma de array. Para usarlo, agrega un string al array, comenzando con "From:", "Bcc:" o "Cc:" (nota el uso de los ":"), seguido de una dirección de correo electrónico válida.

https://codex.wordpress.org/Function_Reference/wp_mail#Using_.24headers_To_Set_.22From:.22.2C_.22Cc:.22_and_.22Bcc:.22_Parameters

En otras palabras:

$headers = array(
    'From: bbb@example.com', 
    'CC: ccc@example.com', 
    'CC: ddd@example.com', 
    'BCC: eee@example.pro', 
    'BCC: fff@example.pro' 
);

Puedes ver donde el Core analiza el string dividiéndolo en el ":":

296  list( $nombre, $contenido ) = explode( ':', trim( $header ), 2 );
297 
298                                 // Limpieza
299                                 $nombre    = trim( $nombre    );
300                                 $contenido = trim( $contenido );
301 
302                                 switch ( strtolower( $nombre ) ) {
303                                         // Principalmente por legado -- procesa un encabezado From: si está presente
304                                         case 'from':

Nota: Esto no ha sido probado pero estoy bastante seguro. No quería empezar a enviar correos a direcciones sin aviso (si es que esas direcciones incluso están activas).

2 jun 2015 21:08:22
Comentarios

Lo único que cambié para que funcione es usar $header y no $group_emails. ¡Gracias!

Kar19 Kar19
7 jun 2015 18:27:23

¿Podrías compartir tu código final? La ayuda será apreciada.

WordCent WordCent
8 ago 2019 13:55:46

Observo que el procesamiento de cabeceras adicionales en wp_mail no funciona exactamente igual que el comando mail() de PHP. WP_MAIL usa cabeceras adicionales en un array unidimensional ("from:alguien@ejemplo.com"). La función mail() de PHP permite un array bidimensional, como en $header = array("from" => "alguien@ejemplo.com"). Si proporcionas un array bidimensional de cabeceras adicionales, wp_mail no procesará correctamente las cabeceras adicionales.

Rick Hellewell Rick Hellewell
2 ago 2022 00:35:40