我正在使用 sendmail 从文本文件发送一封非常简单的电子邮件。这是文本文件:
to:test@someaddress.com
from:admin@hostname.tld
subject:Testing
test test test
Run Code Online (Sandbox Code Playgroud)
我发送的:
sendmail -t < mail.txt
Run Code Online (Sandbox Code Playgroud)
我正在运行 sendmail 的服务器是 hostname.tld。这是/etc/hosts:
12.34.56.78 hostname hostname.tld
127.0.0.1 localhost
Run Code Online (Sandbox Code Playgroud)
其中hostname.tld是服务器的fqdn,12.34.56.78是服务器的公网IP。/etc/hostname 只包含 hostname.tld
当我收到电子邮件时,我得到了这个标题:
Received: from hostname.tld (hostname.tld [127.0.0.1])
Run Code Online (Sandbox Code Playgroud)
我不想要 127.0.0.1,我想要公共 IP,但是无论我做什么,我都无法让 sendmail 使用它。我还编辑了 /etc/mail/sendmail.mc 以获得以下行:
define(`confDOMAIN_NAME', `hostname.tld')dnl
Run Code Online (Sandbox Code Playgroud)
但它什么也不做。
我已经阅读了很多线程,其中人们遇到了类似的问题,但似乎没有任何解决方案。我能做什么?
您上面提到的IP地址的注释实际上并不是服务器sendmail
本身的配置。如果您查看现代部署,sendmail
它通常分为两个组件。传统服务器(守护进程模式)和另一台服务器运行在邮件提交程序模式(MSP)。您可以通过一个简单的命令看到这一点ps
:
$ ps -eaf | grep send
root 24488 1 0 21:10 ? 00:00:00 sendmail: accepting connections
smmsp 24504 1 0 21:10 ? 00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
Run Code Online (Sandbox Code Playgroud)
第一行是守护进程模式下的sendmail,第二行是MSP 模式下的sendmail。您始终可以区分它们,因为大多数附带 sendmail 的发行版都使 MSP 变体作为具有较低权限的特殊用户运行。这是它以用户身份在我的 CentOS 5.x 服务器上运行的情况smmsp
。
注意:这样做是为了分离处理邮件提交(MSP)和邮件传递(守护程序模式)的职责。用户在本地使用mail
和等命令发送邮件时,会连接到 MSP 实例。mailx
在基于 Red Hat 的发行版(例如 CentOS)上处理 sendmail 时,配置文件位于此处:/etc/mail
。我们对此修改感兴趣的文件有 2 个:
第一个文件控制守护程序模式服务器,而第二个文件用于 MSP 服务器。
顺便说一下,这些*.mc
文件并不是两台服务器直接使用的实际配置文件;一般来说sendmail
配置可能会很复杂。鉴于它的年龄和多功能性,它可以通过多种方式进行配置,因此这些*.mc
文件是预配置文件,可以“编译”到实际的sendmail
配置文件中。这些文件的编译版本也位于同一目录中:
通常明智的做法是不要直接更改这两个文件,而是通过其相应的.mc
文件进行更改。您通常会编辑.mc
文件,然后make
在/etc/mail
目录内运行命令。据我所知,这又是一种红帽主义,所以另一个发行版可能会让事情有所不同。
注意: * 这些.mc
文件采用名为M4的宏语言,因此编译它们的工具当然称为m4
。您可以使用如下命令手动编译这些文件:
$ m4 /etc/mail/submit.mc > /etc/mail/submit.cf
Run Code Online (Sandbox Code Playgroud)
这就是Red Hat 在目录中提供的所有花哨的make
内容。Makefile
/etc/mail
那么你需要做出哪些改变呢?需要将以下行附加到submit.mc
文件中:
CLIENT_OPTIONS(`Family=inet, Address=<your ip here>, Name=MTA')dnl
Run Code Online (Sandbox Code Playgroud)
请务必在其显示的位置添加您的 IP <your ip here>
。进行此更改后,您需要重新生成submit.mc
文件。
$ cd /etc/mail && make
Run Code Online (Sandbox Code Playgroud)
重新生成文件后,.cf
您需要重新启动sendmail
:
$ /etc/init.d/sendmail restart
-or-
$ /etc/init.d/sendmail reload
Run Code Online (Sandbox Code Playgroud)
进行上述更改后,您将看到以下标题。例如,在此示例中,我的外部 IP 地址是 50.122.22.45。
Return-Path: <root@mail.sdom.com>
Received: from mail.sdom.com (mail.sdom.com [50.122.22.45])
by sdom.com (8.14.3/8.14.3) with ESMTP id r5J188Gx018193
for <user@sdom.com>; Tue, 18 Jun 2013 21:08:08 -0400
Received: (from root@localhost)
by mail.sdom.com (8.14.3/8.14.3/Submit) id r5J15ua4018000;
Tue, 18 Jun 2013 21:05:56 -0400
Date: Tue, 18 Jun 2013 21:05:56 -0400
Message-Id: <201306190105.r5J15ua4018000@mail.sdom.com>
to:user@sdom.com
from:admin@hostname.tld
subject:Testing
X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,BAYES_00
autolearn=ham version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on mail.sdom.com
X-Greylist: Sender is SPF-compliant, not delayed by milter-greylist-4.0 (sdom.com [127.0.0.1]); Tue, 18 Jun 2013 21:08:09 -0400 (EDT)
test test test
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15234 次 |
最近记录: |