将电子邮件中的“发件人”标头设置为“全名”格式<email@address.com>


14

如何将Drupal发送的电子邮件中的from头更改为格式"Fullname" <email@address.com>

我过去曾经在一个Drupal 6网站上做到这一点,但是我再也无法访问该网站了,我不记得该怎么做。

Answers:


17

您可以使用hook_mail_alter()更改从您的站点发出的任何电子邮件的“发件人”电子邮件地址。所使用的电子邮件地址必须符合RFC标准,它就是您问题的标题。但是用户名可能很棘手,可能包含非法字符。D6文档上有一条评论,其中提供了用于正确格式化电子邮件地址的代码示例。您的代码看起来像...

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

另外,请记住,仅在所有电子邮件客户端中设置“发件人”地址可能都无法达到预期的效果(请参阅有关Drupal问题队列讨论)。您可能还需要根据需要设置“发件人”,“错误至”和“答复至”。这些值位于$message上述代码示例中变量的“标题”中。


6
谢谢。对于那些将来会收到此答案的人,一定要注意最后一段。例如,仅设置$ message ['from']对我不起作用。我必须设置$ message ['headers'] ['From']值。
maxedison 2011年

1
谢谢@maxedison。你是对的。我正在编辑答案,希望修改能够被接受。
jcisio 2013年

设置$ 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中没有更改,因此应该可以使用。


这是为我工作的Gmail & outlook。谢谢:)
kalidasan

3

关于必须更改的设置,这在D7中仍然是一个问题。如有疑问,请在hook_mail_alter中使用以下代码:

$message['from'] = $from;
$message['headers']['From'] = $from;
$message['headers']['Sender'] = $from;
$message['headers']['Return-Path'] = $from;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.