Définissez l'en-tête «de» dans l'e-mail au format «Nom complet» <[email protected]>

14

Comment puis-je changer l'en- tête from dans l'e-mail envoyé depuis Drupal pour être au format "Fullname" <[email protected]>?

J'ai réussi à le faire sur un site Drupal 6 à un moment donné dans le passé, mais je n'ai plus accès à ce site, et je ne me souviens plus comment le faire.

maxedison
la source

Réponses:

17

Vous pouvez utiliser hook_mail_alter()pour modifier l'adresse e-mail "de" de tout e-mail envoyé depuis votre site. L'adresse e-mail utilisée doit être conforme à la norme RFC, ce qu'elle fait est le titre de votre question. Mais les noms d'utilisateur peuvent être délicats et peuvent contenir des caractères illégaux. Il y a un commentaire sur les documents D6 qui fournit un exemple de code pour formater correctement l'adresse e-mail . Votre code ressemblerait à quelque chose comme ...

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

En outre, gardez à l'esprit que le simple fait de définir l'adresse "de" peut ne pas avoir les résultats souhaités dans tous les clients de messagerie (voir la discussion sur la file d'attente des problèmes Drupal ). Vous devrez peut-être également définir "expéditeur", "erreurs sur" et "réponse sur" en fonction de vos besoins. Ces valeurs sont dans "l'en-tête" de la $messagevariable de l'exemple de code ci-dessus.

SoftArtisans
la source
6
Merci. Pour ceux qui arriveront à cette réponse à l'avenir, faites bien attention au dernier paragraphe. Par exemple, le simple fait de définir le message $ ['from'] n'a PAS fonctionné pour moi. J'ai dû définir la valeur $ message ['headers'] ['From'].
maxedison
1
Merci @maxedison. Tu as raison. J'édite la réponse et j'espère que la modification sera acceptée.
jcisio
la définition de $ message ['from'] a bien fonctionné pour moi (5 ans plus tard), mais attention à bien utiliser les guillemets autour de name
autopoietic
11

Il s'agit de la méthode de Drupal 6 pour ajouter le nom du site à l'e-mail. Remplacez variable_get ('site_name, Drupal') par le nom complet du site que vous souhaitez.

/**
* 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 fonction de hook_mail_alter () n'a pas changé dans Drupal 7, donc cela devrait fonctionner.

iStryker
la source
Cela fonctionne pour moi Gmail & outlook. Merci :)
kalidasan
3

En ce qui concerne les paramètres que vous devez modifier, c'est toujours un problème dans D7. En cas de doute, utilisez le code suivant dans votre hook_mail_alter:

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