从电子邮件头中删除apache@localhost?

我的设置:我在一个亚马逊Linux服务器上运行一个Magento网站(似乎基本上是CentOS),使用Apache web服务器。我还使用Google Apps来管理mydomain.com的邮件。 我成功地为服务器设置了MX、SPF和DKIM记录,并使它们正常工作,所以当我发送邮件时,SPF和DKIM都显示“通过”。然而,我遇到了一个奇怪的问题,似乎无法解决---我发送的邮件的一部分头部总是会显示:
Received: (from apache@localhost) by mydomain.com 
我已经费尽心思地寻找方法来将其更改为使用"mail@mydomain.com",但是我似乎无法弄清楚。 我尝试过以下几种方法: - 将php.ini更改为:/usr/sbin/sendmail -t -i -f mail@mydomain.com - 在mydomain.conf的虚拟主机中添加一行:ServerAdmin mail@mydomain.com - 在Magento后台(系统->配置->高级->系统->邮件发送设置)中将Return-Path设置为"Yes" 如果有帮助的话,我的/etc/hosts文件的内容如下:
127.0.0.1   www.mydomain.com
127.0.0.1   mydomain.com
127.0.0.1   localhost localhost.localdomain
对于hosts文件的最后一行,我还尝试了变体...
127.0.0.1   localhost.localdomain mydomain.com
...但是它仍然没有起作用。 我想如果我添加了电子邮件的标题,可能会有助于找出问题的线索(为了保持概括性,我已经更改了很多值)。
Delivered-To: zerowing@email.com
Received: by 123.123.123.123 with SMTP id abcdefg123456790;
        Fri, 3 Apr 2015 08:35:04 -0700 (PDT)
X-Received: by 456.456.456.456 with SMTP id asdfqwerhjkl234hjkl.789.78909876789;
        Fri, 03 Apr 2015 08:35:03 -0700 (PDT)
Return-Path: <mail@mydomain.com>
Received: from mydomain.com (ec2-11-11-111-11.amazonaws.com. [66.66.777.77])
        by mx.google.com with ESMTPS id asdkfjhkjdfha839383.105.2015.04.03.08.35.02
        for <zerowing@email.com>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Fri, 03 Apr 2015 08:35:03 -0700 (PDT)
Received-SPF: pass (google.com: domain of mail@mydomain.com designates 66.66.777.77 as permitted sender) client-ip=66.66.777.77;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of mail@mydomain.com designates 66.66.777.77 as permitted sender) smtp.mail=mail@mydomain.com;
       dkim=pass header.i=@mydomain.com
Received: from mydomain.com (www.mydomain.com [127.0.0.1])
    by mydomain.com (8.14.4/8.14.4) with ESMTP id t33FZ29p004251
    for <zerowing@email.com>; Fri, 3 Apr 2015 15:35:02 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mydomain.com;
    s=default; t=fjIFDJF9049;
    bh=fjO4J4f09j409JF04J909f4j904JF940F9/Y=;
    h=To:Subject:From:Date;
    b=F4J90FJ490j09j490FJ094J0j94f90j409j490Jf90j904JF09j490fj904jf094J
     f09J40F9J904fj049J099j49J049J0FJijffjdlfjldkDLFJKLdjflEJFOIJFOEIEO
     JF9JF049j409j0F094J09FJ049jf049j=
Received: (from apache@localhost) <----------- THIS IS WHAT I'M TRYING TO CHANGE
    by mydomain.com (8.14.4/8.14.4/Submit) id fkdjfljlfsra39393;
    Fri, 3 Apr 2015 15:35:01 GMT
Message-Id: <201504031535.fkdjfljlfsra39393@mydomain.com>
To: =?utf-8?B?Sm9lIEdhcmNpYQ==?= <zerowing@email.com>
Subject: =?utf-8?B?VGVzdCBOZXdzbGV0dGVyLCBwbGVhc2UgaWdub3Jl?=
X-PHP-Originating-Script: 48:Sendmail.php
From: "mydomain.com" <mail@mydomain.com>
Date: Fri, 03 Apr 2015 15:35:01 +0000
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
MIME-Version: 1.0
有一部分我不确定这是否正常,我也不确定为什么会出现apache@localhost,但如果有人有任何想法,将不胜感激,谢谢! 编辑:我使用的MTA是Sendmail。以下是我对sendmail.mc文件进行的配置更改,以适应我的网站。
MASQUERADE_AS(`mydomain.com')dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')
define(`confCW_FILE', `/etc/mail/local-host-names')dnl
dnl define(`confDOMAIN_NAME', `mydomain.com')dnl

编辑我不确定这个问题是否再次被标记为重复,所以我想强调一下为什么它不是基于所提到的问题。转换为后缀表达式并不是一个解决方案,而更像是一个变通方法。我不想为了让Postfix工作而放弃我已经在Sendmail上做的所有设置,只为了遇到其他潜在的问题。我还在上面提到过,在php.ini中编辑sendmail命令。

编辑我想顺便提一下我尝试过但没有成功的其他方法。我在sendmail.mc中添加了以下几行:

FEATURE(`genericstable',`hash -o /etc/mail/genericstable.db')dnl
GENERICS_DOMAIN_FILE(`/etc/mail/generics-domains')dnl
我随后创建了一个包含单行“mydomain.com”的通用域名文件。然后,我创建了一个包含单行“apache mail@homebrewsupply.com”的genericstable文件。我在mail目录中运行了make命令,重新创建了cf文件,并重新启动了sendmail,但是没有成功。 我尝试编辑/etc/aliases文件。我试图将“apache: root”这一行更改为“apache:root,mail@mydomain.com”,或者只是“apache:mail@mydomain.com”,但是这样做也没有任何效果。 我还尝试在/etc/mail/virtuserstable文件中添加了单行“apache@localhost mail@mydomain.com”。但是这样做也没有任何效果。 我对使其正常工作感到非常沮丧。我离达到我所需的目标很近了,但老实说,我真不知道应该从哪里开始寻找替换“apache@localhost”这一行的方法。

这是重复的问题,你可以在以下链接找到答案:http://serverfault.com/questions/254109/apache-sendmail-trying-to-change-user-from-address-from-apache-to-domain-acco 和 http://serverfault.com/questions/484777/how-to-configure-a-real-domain-name-for-sender-address - Mike B
首先,对我来说,这些问题的解决方案都不适用。第一个解决方案归结为“我无法弄清楚如何让sendmail工作,所以我放弃了并改用postfix”。这不是解决问题的方法,而是一种权宜之计。第二个解决方案,将服务器名称添加到hosts文件中,对我也没有起作用---所以我遇到的问题肯定是不同的。而且我不能等待有人提供其他可行的解决方案,尤其是对于已经过去两年的问题。 - Zero Wing
4个回答

发送邮件的发件人地址是调用消息发送的守护程序的用户(apache)@您的MTA中配置的域名(sendmail或postfix之一)。 如果您的本地MTA是postfix,则需要更改myorigin设置(默认为配置的主机名。在此示例中为localhost)。此设置位于main.cf中(大多数发行版的默认位置为/etc/postfix/main.cf)。只需将其更改为要发送的域名。然后重新启动postfix。 当然,您也可以更改服务器的主机名以与所需的发送域匹配,这可能更容易。 请记住,如果您打算从此服务器发送该域的电子邮件,则应添加允许其发送电子邮件的SPF DNS记录,否则您的消息很可能会被垃圾邮件过滤器拦截。

嗨,我的MTA实际上是sendmail,虽然我认为我已经进行了所有可能的调整(我将尝试在我的问题中添加一些这些更改)。你能否说明一下“更改服务器主机名以匹配所需的发送域名”是什么意思?如果你的意思是让我在命令行上输入“hostname”时输出mydomain.com,那我已经设置好了。另外,我为该域设置了SPF记录,我在问题中提到我已经成功设置和使用SPF和DKIM(在我的电子邮件头中都显示通过)。 - Zero Wing
找到了一篇可能有所帮助的帖子,提出了以下建议:要在Unix上更改信封的“发件人”地址,您需要在sendmail二进制文件中指定一个“-r”选项。您可以通过将“-r”选项添加到“sendmail_path”命令行来在php.ini中全局设置。来源:http://stackoverflow.com/questions/5666312/php-mail-issue-with-www-data - Joe
我尝试在我的php.ini文件中的"sendmail_path"后面添加了"-r",但似乎出了问题,因为邮件突然停止从服务器发送出去了。更具体地说,我将这一行改成了--- sendmail_path = /usr/sbin/sendmail -t -i -r mail@mydomain.com,但仍然没有起作用(我尝试过带引号和不带引号的方式,并且确保重新启动了服务器,但都没有成功,而且我也不确定是什么原因导致它在那之后无法发送邮件)。 - Zero Wing

在查看您的配置时,似乎有一些位信息缺失(对于我的语法不准确表示抱歉,我不经常发布): 您可能需要添加MASQUERADE_DOMAIN配置选项来匹配MASQUERADE_AS,并将MASQUERADE_DOMAIN与主机的完全限定域名(大多数Linux平台上的hostname -f)匹配。如果它们没有同时存在,我曾经遇到一些奇怪的问题,因此配置应该是这样的:
MASQUERADE_AS(`mydomain.com')dnl
MASQUERADE_DOMAIN(`fqdnname.internal')dnl
然后这一行:
dnl define(`confDOMAIN_NAME', `mydomain.com')dnl
应该真的是这样
define(`confDOMAIN_NAME', `mydomain.com')dnl

否则,当您更新sendmail.cf文件时,make/hash命令将忽略它。这位朋友对为什么在sendmail.mc文件中使用"dnl"和"dnl #"有很好的解释:在sendmail.mc文件中,“dnl”和“dnl#”有什么区别?

我仍在尝试从我的服务器中移除"apache"部分,但希望这能让您更接近目标!


系统 -> 配置 -> 高级 -> 系统 -> 设置回复路径 -> 是 或者将其设置为您想使用的电子邮件。今天刚发现的 - 显然一些邮件被有严格规定的邮件服务器拒收了(.edu,.gov...等)。

浪费了很多时间试图弄清楚为什么我们的SPF记录被忽略,从我们的网站发送给我们的电子邮件仍然被标记为伪造。我有一种直觉,是Received-From头部导致了这个问题,所以我来到了这里。你的30秒解决方案立即生效,结束了几个小时的挫败感!这个页面上提供了解决此问题和Magento的最简单方法。建议您在修改服务器配置之前先尝试这个方法。 - Ashley Swatton
我建议完全关闭基于服务器的电子邮件服务,只使用Sparkpost + smtpPro插件。它与每月10万封免费电子邮件完美配合。 - Kalvin Klien

define(`confRECEIVED_HEADER', `internal info removed')dnl添加到submit.mc中,然后生成.cf文件,并像往常一样重新启动sendmail。 重要提示:为了使此方法生效,应编辑的文件是submit.mc,而不是sendmail.mc。如果您编辑了sendmail.mc文件,那么将修改您提到的Received头部之上的那个头部(即Received: from mydomain.com (www.mydomain.com [127.0.0.1]))。 注意:在字面字符串internal info removed之外,您可以重复使用提供的某些信息,同时隐藏敏感信息,例如:by $j id $i; $b变为by DOMAIN id ID; TIMESTAMP。 以上操作将删除/替换您提到的Received头部之后的信息。
Received: (from apache@localhost) <----------- THIS IS WHAT I'M TRYING TO CHANGE
by mydomain.com (8.14.4/8.14.4/Submit) id fkdjfljlfsra39393;
Fri, 3 Apr 2015 15:35:01 GMT
另请参阅类似问题:如何从邮件头中去掉“Received: (from apache@localhost)”和sendmail版本信息

  • 相关问题