Configure el encabezado "desde" en el correo electrónico para que tenga el formato "Nombre completo" <[email protected]>

14

¿Cómo puedo cambiar el encabezado from en el correo electrónico enviado desde Drupal para que tenga el formato "Fullname" <[email protected]>?

Logré hacerlo en un sitio de Drupal 6 en un punto en el pasado, pero ya no tengo acceso a ese sitio y no recuerdo cómo hacerlo.

maxedison
fuente

Respuestas:

17

Puede usar hook_mail_alter()para cambiar la dirección de correo electrónico "desde" de cualquier correo electrónico enviado desde su sitio. La dirección de correo electrónico utilizada debe cumplir con el estándar RFC, que es el título de su pregunta. Pero los nombres de usuario pueden ser complicados y pueden contener caracteres ilegales. Hay un comentario sobre los documentos D6 que proporciona una muestra de código para formatear correctamente la dirección de correo electrónico . Su código se vería algo así como ...

function yourmodule_mail_alter(&$message) {
  $message['from'] = $message['headers']['From'] = '"Full Name" <[email protected]>';
}

Además, tenga en cuenta que solo configurar la dirección "de" puede no tener los resultados deseados en todos los clientes de correo electrónico (consulte la discusión sobre la cola de problemas de Drupal ). Es posible que también deba configurar "remitente", "errores a" y "responder a" según sus requisitos. Esos valores están en el "encabezado" de la $messagevariable de la muestra de código anterior.

SoftArtisans
fuente
66
Gracias. Para aquellos que lleguen a esta respuesta en el futuro, definitivamente presten atención al párrafo final. Por ejemplo, simplemente configurar el mensaje $ ['from'] NO me funcionó. Tuve que establecer el valor de $ message ['encabezados'] ['De'].
maxedison
1
Gracias @maxedison. Tienes razón. Estoy editando la respuesta y espero que la modificación sea aceptada.
jcisio
configurar $ message ['from'] funcionó bien para mí (5 años después), pero tenga en cuenta que sí usa las comillas dobles del nombre
autopoyético el
11

Este es el método de Drupal 6 para agregar el nombre del sitio al correo electrónico. Sustituya variable_get ('nombre_sitio, Drupal') con el nombre completo del sitio que desee.

/**
* Implementation of hook_mail_alter().
* Here we allow the site name to be used as the senders name for outgoing email.
* see http://drupal.org/node/209672
*/
function mymodule_mail_alter(&$message){
  $default_from = variable_get('site_mail', ini_get('sendmail_from'));

  if($message['from'] == $default_from){
    $message['from'] = '"'. variable_get('site_name', 'Drupal') .'" <'. $default_from .'>';
    $message['headers']['From'] = $message['headers']['Sender'] = $message['headers']['Return-Path'] = $message['headers']['Errors-To'] = $message['headers']['Reply-To'] = $message['from'];
  }
}

la función para hook_mail_alter () no ha cambiado en Drupal 7, por lo que debería funcionar.

iStryker
fuente
Esto me ha funcionado Gmail & outlook. Gracias :)
kalidasan
3

En cuanto a la configuración que tiene que cambiar, esto sigue siendo un problema en D7. En caso de duda, use el siguiente código en su hook_mail_alter:

$message['from'] = $from;
$message['headers']['From'] = $from;
$message['headers']['Sender'] = $from;
$message['headers']['Return-Path'] = $from;
Countzero
fuente