Enviar correos de administrador a múltiples direcciones de email

19 dic 2014, 01:35:12
Vistas: 14.2K
Votos: 5

¿Existe algún hook que me permita enviar emails a múltiples direcciones para las notificaciones administrativas predeterminadas?

Esperaba poder construir un array:

$adminEmails = array('me1@example.com', 'me2@example.com');

Y que todos los correos de administrador (como notificaciones de nuevos usuarios) se enviaran a $adminEmails

¿Es posible?

1
Comentarios

Hay una discusión aquí - parece que no hay una solución: https://core.trac.wordpress.org/ticket/10726

Pat Gilmour Pat Gilmour
19 dic 2014 01:42:35
Todas las respuestas a la pregunta 3
1

Esto se puede hacer filtrando la función wp_mail, verificando si to está configurado con el correo del administrador, y si es así, agregar direcciones de correo adicionales, y devolver los argumentos a wp_mail

add_filter( 'wp_mail', 'my_custom_to_admin_emails' );

/**
 * Filtrar la función WP_Mail para agregar múltiples correos de administrador
 *
 *
 *
 * @param array $args Un array compacto de argumentos de wp_mail(), incluyendo los valores "to" (para),
 *                    subject (asunto), message (mensaje), headers (cabeceras) y attachments (adjuntos).
 *
 * @return array
 */
function my_custom_to_admin_emails( $args ) {
    // Si 'to' no está establecido (quién sabe por qué no lo estaría) devolver los argumentos
    if( ! isset($args['to']) || empty($args['to']) ) return $args;

    // Si TO es un array de correos, probablemente no sea un correo de administrador
    if( is_array( $args['to'] ) ) return $args;

    $admin_email = get_option( 'admin_email' );

    // Verificar si el correo del admin está en la cadena, ya que TO podría estar formateado como 'Administrador <admin@dominio.com>',
    // y si verificamos específicamente si es solo el correo, podríamos perder algunos correos de admin.
    if( strpos( $args['to'], $admin_email ) !== FALSE ){
        // Establecer la clave TO del array igual al correo del admin existente, más cualquier correo adicional
        //
        // Todas las direcciones de correo proporcionadas a wp_mail() como parámetro $to deben cumplir con RFC 2822. Algunos ejemplos válidos:
        // usuario@ejemplo.com
        // Usuario <usuario@ejemplo.com>
        $args['to'] = array( $args['to'], 'otro@dominio.com', 'Admin4 <admin4@dominio.com>' );
    }

    return $args;
}

Devolvemos TO como un array, ya que wp_mail manejará el array y lo explotará según sea necesario para enviar el correo

16 mar 2016 23:24:51
Comentarios

Algo de lo que hay que tener cuidado: si solicitas un restablecimiento de contraseña y tu correo electrónico es el mismo que la opción admin_email, esos otros correos también recibirán ese mensaje... tenlo en cuenta, solo verifica el campo PARA cuando se envían los correos, no verifica si se supone que es un correo de administrador (ya que ni siquiera sé cómo hacer eso ahora mismo)

sMyles sMyles
17 mar 2016 02:43:01
5

Prueba esto:

update_option( 'admin_email', 'me1@example.com, me2@example.com' );

Ten en cuenta que el valor es una cadena; ¡solo abre y cierra comillas!

19 dic 2014 02:23:21
Comentarios

Gracias @shanebp - pero no funciona. Simplemente los fusiona en una sola cadena en las opciones, así que intenta enviar a: me1@example.comme2@example.com

Pat Gilmour Pat Gilmour
19 dic 2014 04:30:34

Eso es una lástima... Entonces, para solo correos de administrador sobre nuevos usuarios, la función es conectable. Así que podrías crear una versión que envíe a múltiples correos electrónicos predefinidos para los administradores. http://codex.wordpress.org/Function_Reference/wp_new_user_notification

shanebp shanebp
19 dic 2014 17:17:48

Gracias shanebp - creo que lo que sugieres es realmente la mejor solución para mis necesidades.

Pat Gilmour Pat Gilmour
20 dic 2014 01:24:28

@PatGilmour Entonces por favor márcalo como solución.

kaiser kaiser
17 mar 2016 02:21:28

@PatGilmour Bueno, si la respuesta original es incorrecta probablemente no debería marcarse como correcta. Yo marcaría como correcta la respuesta de sMyles o actualizaría la respuesta de shanebp con la solución ofrecida en los comentarios.

Simon East Simon East
12 ene 2017 03:52:33
0

Aquí está mi solución, utiliza el filtro update_option_*, creo que es la forma correcta de abordarlo aquí. Agrega esto a un plugin o al archivo functions.php de tu tema, y luego podrás ingresar de manera segura correos electrónicos de administrador separados por comas en la pantalla de configuración->general.

add_filter('pre_update_option_admin_email','sanitize_multiple_emails',10,2);

function sanitize_multiple_emails($value,$oldValue)
{
    // Si algo parece sospechoso, deja que WordPress continúe como lo haría normalmente.
    if(!isset($_POST["admin_email"]))
        return $value;

    $result = "";
    $emails = explode(",",$_POST["admin_email"]);
    foreach($emails as $email)
    {
        $email = trim($email);
        $email = sanitize_email( $email );

        // De nuevo, ¿algo está mal? Permite que WordPress lo maneje.
        if(!is_email($email))
            return $value;
        $result .= $email.",";

    }

    if(strlen($result == ""))
        return $value;
    $result = substr($result,0,-1);

    return $result;
}
1 abr 2017 00:22:14