Pregunta

¿Es posible enviar correos electrónicos con la función wp_mail () que tiene su tipo de contenido: multipart/alternativa?

Necesito enviar correos electrónicos que se puedan mostrar como html o texto sin formato dependiendo de qué medio interpreta el correo electrónico.

¡Cualquier sugerencia es bienvenida!

¿Fue útil?

Solución

Está justo ahí en el wp_mail() documentación (por debajo Uso):

El tipo de contenido predeterminado es 'Text/Plain' que no permite usar HTML. Puede establecer el tipo de contenido del correo electrónico utilizando el filtro 'wp_mail_content_type' (consulte el ejemplo a continuación), o incluyendo un encabezado como "Tipo de contenido: Text/HTML". Tenga cuidado de restablecer 'WP_MAIL_CONTENT_TYPE' Back to 'Text/Plain' después de enviar su mensaje, Sin embargo, porque no hacerlo podría conducir a problemas inesperados con correos electrónicos de WP o complementos/temas.

(énfasis mío)

El segundo ejemplo en la página le muestra cómo hacerlo (el ejemplo usa text/html Pero deberías poder usar tu multipart/alternative en cambio.

Otros consejos

Es totalmente posible cuando tiene acceso a la instancia de PhPMailer.

if ($is_html) 
    add_action('phpmailer_init', 'fix_mimeheader');

// more code.

wp_mail( $to, $subject, $html_message, $headers, $attachments );

// ...

function fix_mimeheader( $phpmailer ) {
     // Generate $text_message here.
     // ...

     $phpmailer->AltBody = $text_message;
}

El mensaje enviado a wp_mail debe ser su código HTML. Tampoco debe incluir ningún encabezado de tipo de contenido. Actualmente uso de, CC y respuesta en el complemento que he hecho.

Si el correo electrónico se envía como HTML, ejecuto la acción que establece la propiedad Altbody en el objeto PhPMailer directamente. Esto hace que las banderas adecuadas conviertan el correo electrónico en un correo electrónico multipart/alternativo.

Puedes usar el filtro wp_mail_content_type, que ahora se había documentado en el códice.

La documentación de WP_Mail sobre restablecer el tipo de contenido de nuevo a 'Text/Plain' es un poco engañoso, IMO. Como este es un filtro, realmente no lo "reinicia". Lo que debe considerar en su filtro es una lógica condicional para determinar cuándo necesita usar multipart frente a texto plano o html:

add_filter( 'wp_mail_content_type', 'my_mail_content_type' );
function my_mail_content_type( $content_type ) {

    if( $some_condition ) {
        return 'multipart/mixed';
    } else {
        return 'text/plain';
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top