使用联系表单发送的电子邮件显示管理员的“发件人”地址,而不是访问者的电子邮件。

3
这个页面使用Drupal的联系表单来发送电子邮件:http://www.westlake.school.nz/contact 问题是,学校工作人员使用Outlook。当他们收到家长等人的电子邮件时,邮件会显示为:

"From: admin@example.com On Behalf Of Westlake Boys High School"

在Gmail中,邮件以正确的形式显示:

from Westlake Boys High School parentsEmailAddress@yahoo.com

不幸的是,我不能要求整个学校工作人员停止使用Outlook和Exchange。
Drupals的drupal_mail函数能否被更改以解决这个问题?
从contact.pages.inc中可以看到:
drupal_mail('contact', 'page_mail', $contact['recipients'], language_default(), $values, $from);

^链接已失效。提供详细答案会更好。 - dan3
使用Wayback Machine 已更正的链接 查看如何从已发送邮件中删除“代表”的内容。 - GreenGiant
1个回答

2
在这个网址上(http://api.drupal.org/api/function/drupal_mail#comment-3243),tmsimont解释说:

$from参数只会改变From头,而不是Sender、Errors-to或Return-Path。

这是drupal_mail函数的一个细节,它被contact_mail_page_submit使用。
以下是更多详细信息(来自drupal_mail()函数的代码)。
line 3 - $default_from = variable_get('site_mail', ini_get('sendmail_from'));

line 9 -     'from'     => isset($from) ? $from : $default_from,

line 23 -  if ($default_from) {
line 24 -    // To prevent e-mail from looking like spam, the addresses in the Sender and
line 25 -    // Return-Path headers should have a domain authorized to use the originating
line 26 -    // SMTP server. Errors-To is redundant, but shouldn't hurt.
line 27 -    $headers['From'] = $headers['Sender'] = $headers['Return-Path'] = $headers['Errors-To'] = $default_from;
line 28 -  }
line 29 -  if ($from) {
line 30 -    $headers['From'] = $from;
line 31 -  }
line 32 -  $message['headers'] = $headers;

为了解决您的问题,您可以实现hook_mail函数(http://drupal.org/node/358855#comment-2079266)。
更多资源可在此处找到:
1 - http://drupal.org/node/656472 2 - http://drupal.org/node/861562 3 - http://www.nmglc.co.uk/content/overriding-drupals-mail-function

谢谢,这比我找到的信息要详细得多。 - gbhall
gbhall,太好了!如果你发现这个答案解决了你的问题,请将其标记为正确。谢谢! - João Guilherme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接