Ustaw nagłówek „z” w wiadomości e-mail w formacie „Pełna nazwa” <[email protected]>

14

Jak mogę zmienić z nagłówka w wiadomości wysłanej z Drupal być w formie "Fullname" <[email protected]>?

W pewnym momencie w przeszłości udało mi się to zrobić na stronie Drupal 6, ale nie mam już dostępu do tej strony i nie pamiętam, jak to zrobić.

maxedison
źródło

Odpowiedzi:

17

Możesz użyć, hook_mail_alter()aby zmienić adres e-mail „z” każdego e-maila wysłanego z Twojej witryny. Używany adres e-mail musi być zgodny ze standardem RFC, co stanowi tytuł pytania. Ale nazwy użytkowników mogą być trudne i mogą zawierać niedozwolone znaki. W dokumentacji D6 znajduje się komentarz, który zawiera próbkę kodu do prawidłowego formatowania adresu e-mail . Twój kod wyglądałby jak ...

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

Pamiętaj też, że samo ustawienie adresu „od” może nie przynieść pożądanych rezultatów we wszystkich klientach e-mail (patrz dyskusja na temat kolejki problemów Drupal ). Może być konieczne ustawienie „nadawcy”, „błędów do” i „odpowiedzi” w zależności od wymagań. Wartości te znajdują się w „nagłówku” $messagezmiennej z powyższego przykładu kodu.

SoftArtisans
źródło
6
Dzięki. Dla tych, którzy dojdą do tej odpowiedzi w przyszłości, zdecydowanie zwróć uwagę na ostatni akapit. Na przykład, ustawienie $ message ['from'] NIE działało dla mnie. Musiałem ustawić wartość $ message ['headers'] ['From'].
maxedison
1
Dzięki @maxedison. Masz rację. Edytuję odpowiedź i mam nadzieję, że modyfikacja zostanie zaakceptowana.
jcisio
ustawienie $ message ['from'] działało dla mnie dobrze (5 lat później), ale uważaj, że używasz podwójnych cudzysłowów od nazwy
autopoietic
11

Jest to metoda z Drupal 6, aby dodać nazwę witryny do wiadomości e-mail. Podstaw zmienną (nazwa strony, Drupal) odpowiednią nazwą witryny.

/**
* 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'];
  }
}

funkcja hook_mail_alter () nie zmieniła się w Drupal 7, więc to powinno działać.

iStryker
źródło
Dla mnie to działa Gmail & outlook. Dzięki :)
kalidasan
3

Jeśli chodzi o ustawienia, które musisz zmienić, jest to nadal problem w D7. W razie wątpliwości użyj następującego kodu w swoim hook_mail_alter:

$message['from'] = $from;
$message['headers']['From'] = $from;
$message['headers']['Sender'] = $from;
$message['headers']['Return-Path'] = $from;
Countzero
źródło