¿Por qué wp_mail() no me permite establecer la cabecera From: cuando el simple mail() de PHP sí lo hace?

10 feb 2011, 22:45:28
Vistas: 37.5K
Votos: 36

Cuando uso wp_mail( $to, $subject, $message, $headers ) (con valores en su lugar, por supuesto), el correo se envía con un nombre y correo del remitente que no está configurado en ningún lugar que pueda encontrar (ni siquiera en la configuración de PHP o Apache). Sin embargo, usar mail( $to, $subject, $message, $headers ) en su lugar funciona perfectamente. ¿Qué podría estar pasando con wp_mail() para causar esto?

0
Todas las respuestas a la pregunta 5
5
45

Hola @helenyhou:

Puedes configurar el encabezado, solo que no con un parámetro. WordPress usa "hooks" y los hooks que necesitas son 'wp_mail_from' y 'wp_mail_from_name'.

Aquí están los hooks que podrí­as añadir al archivo functions.php de tu tema para modificar el encabezado "De:" cuando uses wp_mail() para la dirección de correo electrónico Helen Hou-Sandi <helenyhou@example.com>:

add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
  return 'helenyhou@example.com';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
  return 'Helen Hou-Sandi';
}
10 feb 2011 22:56:02
Comentarios

Estaba revisando los filtros y tienes razón, efectivamente soluciona el problema. Supongo que el Codex debería actualizarse? http://codex.wordpress.org/Function_Reference/wp_mail

También relacionado: esto parece afectar a muchos plugins de formularios, incluyendo el poderoso GravityForms. Actualmente estoy desarrollando un formulario personalizado, pero si este es el comportamiento esperado de WP, ¿por qué configurar los encabezados usando el método tradicional funciona para otros (e incluso en algunos de mis otros sitios)?

helenhousandi helenhousandi
10 feb 2011 23:47:17

@helenyhou - Para evitar afectar otros formularios, necesitarías agregar los filtros en tu plugin justo antes de llamar a wp_mail() y luego eliminarlos inmediatamente después. En cuanto a por qué funcionan los encabezados, no sé cuáles son tus otros casos de uso, pero me sorprendería que wp_mail() funcionara de esa manera.

MikeSchinkel MikeSchinkel
11 feb 2011 00:49:37

Ahhhh descubrí lo que estaba pasando - otro plugin estaba agregando los filtros globalmente para algo que no solicité y no puedo desactivar - mal, mal, mal. Así que ahora los encabezados regulares sí funcionan después de todo. Parece que usar esos filtros sería la mejor práctica, si ya están ahí.

helenhousandi helenhousandi
11 feb 2011 01:00:35

Solo una nota aquí que cualquier filtro que un plugin agregue puede ser eliminado mediante remove_filter(HOOK, FUNCIÓN).

Jason Coleman Jason Coleman
17 sept 2012 00:27:06

solo funciona si el dominio del correo electrónico de origen es el mismo que el del sitio.

Omer Omer
28 abr 2018 10:02:22
0

Bueno, si estás usando el formato From: "Tu Nombre" <tucorreo@ejemplo.com>\r\n en tus cabeceras, no deberías tener un problema (a menos que tengas un plugin instalado que sobrescriba la función wp_mail).

Sin embargo, como dijo Mike, puedes filtrar los valores finales con esos filtros, o simplemente instalar este plugin:

Send From

Te dará una configuración de opciones para determinar qué nombre y correo electrónico usar en wp_mail().

10 feb 2011 22:59:09
5

Perdón por revivir una pregunta antigua, pero ¿no sería mejor configurarlo a través de los headers de esta manera?

$subject  = "MyPlugin: Alerta (".get_bloginfo('wpurl').")";
$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=".get_bloginfo('charset')."" . "\r\n";
$headers .= "From: MyPlugin <".$this->settings['from_address'].">" . "\r\n";
wp_mail($this->settings['notify_address'], $subject, $alertMessage, $headers);

De esta manera no tienes que preocuparte por usar un filtro y luego eliminarlo después de wp_mail().

15 abr 2011 18:29:03
Comentarios

Yo no configuré el filtro, otro plugin lo hizo. El filtro tiene prioridad sobre el encabezado. Además, realmente deberías usar site_url() en lugar de get_bloginfo('wpurl')

helenhousandi helenhousandi
16 abr 2011 07:14:47

Pero entonces seguramente ese plugin es malo por no limpiar después de sí mismo... no hay mucho que puedas hacer al respecto :( en ese caso, mejor cambio mi plugin para usar filtros por si acaso otro plugin lo ha roto.

Scott Scott
16 abr 2011 11:59:29

@helenyhou - +1 por recordarme lo de site_url(). También he cambiado mi plugin para usar filtros en lugar de usar $headers. Además me he asegurado de eliminar esos filtros una vez enviado el correo para no interferir con nada más :)

Scott Scott
16 abr 2011 16:36:40

sí, es culpa de ese plugin por no darme una opción para no usar esos filtros, pero por suerte comentar los filtros funcionó para mi caso. Probablemente preguntaré a ver qué es mejor usar en el futuro - un filtro por uso o los headers más familiares. Los headers probablemente son más eficientes, pero entonces ¿por qué están esos filtros ahí? Siempre hay más preguntas :)

helenhousandi helenhousandi
26 abr 2011 15:45:45

En la versión actual, es totalmente aceptable usar get_bloginfo('wpurl'): Esto ya devuelve site_url(). get_bloginfo('home') y get_bloginfo('siteurl') están obsoletos. https://developer.wordpress.org/reference/functions/get_bloginfo/

Ion Ion
25 dic 2016 18:03:43
1

Es un poco un truco, pero también puedes usar la etiqueta de cabecera Reply To:

$headers = 'Reply-To: "Aaren A. Aarenson" <aaron@somemail.com>';

Lamentablemente esto agrega la dirección de correo a la lista From, y al responder significa que tendrás que eliminar manualmente la dirección configurada en el filtro wp_mail_from.

14 sept 2015 22:01:04
Comentarios

¡Esto lo solucionó para mí! ¡Me salvaste la vida, colega! ;)

user382738 user382738
27 jun 2017 02:43:04
0

Tuve el mismo problema. En mi caso resultó que el proveedor de hosting (BlueHost) estaba impidiendo el cambio del campo from. Aquí lo explican https://my.bluehost.com/cgi/help/206.

Solucioné el problema agregando el correo electrónico a los buzones de cPanel tal como indican.

14 ago 2015 16:33:29