Sendmail和nslookup解决问题

在我的Ubuntu服务器上,我一直试图通过安装sendmail(我也安装了postfix,但是我放弃了它)来让PHP的mail()函数工作。 但是,当我尝试发送邮件时,它在/var/log/mail.log出现以下错误:

 sm-mta[xxx]: gethostbyaddr(xxxx) failed: x 

当我执行nslookup (例如nslookup gmail.com )时,它表示无法parsing并且连接超时。 花了整整一天,尝试各种各样的东西,我决定把我的域名服务器到我的接口文件,按照: https : //askubuntu.com/a/331636

这减轻了我在使用nslookup时遇到的问题,但是在尝试发送邮件时仍然在日志中收到相同的错误,除了我的公共IP地址没有显示出来,只有私有的IP地址。 例如

 sm-mta[xxx]: gethostbyaddr(178.xxx) failed: x # public IP error not showing anymore sm-mta[xxx]: gethostbyaddr(10.xxx) failed: x # private IP error still showing 

我已经看了很多这方面的文档,我仍然不知道我做错了什么。 我已经检查过sendmail是使用端口25.因为我只发送邮件,我需要担心有关MX服务器的DNSlogging吗?


/etc/resolv.conf

 # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 2001:4860:4860::8844 nameserver 2001:4860:4860::8888 nameserver 8.8.8.8 

/etc/dhcp/dhclient.conf

 option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; #send host-name "andare.fugue.com"; send host-name = gethostname(); #send dhcp-client-identifier 1:0:a0:24:ab:fb:9c; #send dhcp-lease-time 3600; #supersede domain-name "fugue.com home.vix.com"; #prepend domain-name-servers 127.0.0.1; request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers, dhcp6.fqdn, dhcp6.sntp-servers; #require subnet-mask, domain-name-servers; #timeout 60; #retry 60; #reboot 10; #select-timeout 5; #initial-interval 2; #script "/etc/dhcp3/dhclient-script"; #media "-link0 -link1 -link2", "link0 link1"; #reject 192.33.137.209; #alias { # interface "eth0"; # fixed-address 192.5.5.213; # option subnet-mask 255.255.255.255; #} #lease { # interface "eth0"; # fixed-address 192.33.137.200; # medium "link0 link1"; # option host-name "andare.swiftmedia.com"; # option subnet-mask 255.255.255.0; # option broadcast-address 192.33.137.255; # option routers 192.33.137.250; # option domain-name-servers 127.0.0.1; # renew 2 2000/1/12 00:00:01; # rebind 2 2000/1/12 00:00:01; # expire 2 2000/1/12 00:00:01; #} 

etc/hosts

 # Your system has configured 'manage_etc_hosts' as True. # As a result, if you wish for changes to this file to persist # then you will need to either # a.) make changes to the master file in /etc/cloud/templates/hosts.tmpl # b.) change or remove the value of 'manage_etc_hosts' in # /etc/cloud/cloud.cfg or cloud-config from user-data 127.0.1.1 domain.name 127.0.0.1 localhost.localdomain localhost 178.xxx domain.name # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts 

据我所知,你只是想发邮件。 在这种情况下,您不得为服务器设置MXlogging,因为您的邮件服务器不负责任何域。

如果我明白你的问题,你真的只想要一个MTA来传递你的邮件。

为此设置一个完整的邮件服务器是矫枉过正的; 所以首先这里有几个select: https : //unix.stackexchange.com/questions/1449/lightweight-outgoing-smtp-server

如果你想拥有一个真正的邮件服务器,postfix将是最好的: https : //askubuntu.com/questions/457003/setting-up-a-send-only-mail-server

但是,您的DNS问题可能与此无关。

当然,希望能够解决服务器上使用的所有IP和主机名。 为了达到这个目的,你需要一个本地名称服务器来处理你的本地地址(和名字),这些名字将任何其他请求转发给其他名字服务器。

但可能有一个更简单的方法:邮件服务器执行的DNS查找应取决于邮件发件人和收件人域。 你应该检查,如果这些是正确的,只是限制自己的名字,可以解决。 也许你已经configuration了From-address指向一些本地定义的域?

为了debugging这个,你可以尝试从命令行发送邮件,然后转到PHP邮件程序。

来自队列的示例邮件将有助于检查这一点。

你可以请张贴netstat -natp的输出吗? 只是想看看sendmail绑定的IP地址。

我知道这个答案是不完整的,但是现在我已经可以说了。

当你写,它必须工作。

user1316146也是正确的:gethostbyaddr正在做反向ip查找,这是不需要的邮件发送。 这个问题不在我看来。

我想,你只是一个嘈杂的networking或一个不是真正可靠的本地dns。 你必须configuration你的sendmail来尝试更加积极地获取目标地址,而且要多次。

或者,也许你应该安装一个本地cachingonly绑定,使这样的问题更清楚。

或者,也许你应该尝试一个更强大的mta,postfix是一个不错的方法。

gethostbyaddr正在执行反向DNS,因此您需要为有问题的IP地址设置PTRlogging。 您还需要将该地址范围委托给您公开地址。

如果您使用的是8.8.8.8作为DNS的DNS,那么您将无法为10.0.0.0/8networking获得PTRlogging。

这种查找通常只发生在邮件发送到服务器上的时候,因为邮件服务器试图确定发送者的主机名以将其与发送的HELO消息进行比较。

顺便说一句,如果你只是想发送邮件,默认的后缀configuration适用于Ubuntu下。