Установите заголовок «из» в электронном письме в формате «Полное имя» <email@address.com>

14

Как изменить заголовок from в электронном письме, отправленном с Drupal, на формат "Fullname" <email@address.com>?

Мне удалось сделать это на сайте Drupal 6 в прошлом, но у меня больше нет доступа к этому сайту, и я не помню, как это сделать.

maxedison
источник

Ответы:

17

Вы можете использовать hook_mail_alter()для изменения адреса электронной почты «от» любого электронного письма, отправленного с вашего сайта. Используемый адрес электронной почты должен соответствовать стандарту RFC, что соответствует названию вашего вопроса. Но имена пользователей могут быть хитрыми и могут содержать недопустимые символы. Есть комментарий к документам D6, который предоставляет пример кода для правильного форматирования адреса электронной почты . Ваш код будет выглядеть примерно так ...

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

Кроме того, имейте в виду, что простая установка адреса «от» может не дать желаемых результатов во всех почтовых клиентах (см. Обсуждение очереди проблем Drupal ). Вам также может потребоваться установить «отправитель», «ошибки» и «ответить» в зависимости от ваших требований. Эти значения находятся в «заголовке» $messageпеременной из приведенного выше примера кода.

SoftArtisans
источник
6
Благодарю. Для тех, кто придет к этому ответу в будущем, обязательно обратите внимание на последний абзац. Например, просто установка $ message ['from'] НЕ работала для меня. Мне пришлось установить значение $ message ['headers'] ['From'].
Maxedison
1
Спасибо @maxedison. Вы правы. Я редактирую ответ и надеюсь, что изменения будут приняты.
13
установка $ message ['from'] для меня работала нормально (5 лет спустя), но следите за тем, чтобы вы использовали двойные кавычки от имени
autopoietic
11

Это метод из Drupal 6 для добавления имени сайта в электронное письмо. Замените variable_get ('site_name, Drupal') на Полное имя сайта, которое вы хотите.

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

функция для hook_mail_alter () не изменилась в Drupal 7, так что это должно работать.

iStryker
источник
Это работает для меня Gmail & outlook. Спасибо :)
Калидасан
3

Что касается настроек, которые вы должны изменить, это все еще проблема в D7. Если вы сомневаетесь, используйте следующий код в вашем hook_mail_alter:

$message['from'] = $from;
$message['headers']['From'] = $from;
$message['headers']['Sender'] = $from;
$message['headers']['Return-Path'] = $from;
CountZero
источник