php发送邮件未到达目的地,未记录错误.如何强制sendmail的dns查找


php sendmail not arriving at destination, not logging errors. how do i force dns lookup for sendmail?

我主持了一堆网站,其中一个是网上花店。他们使用一个名为FDL的程序。它基本上从订单中读取确认电子邮件,并将其输入到他们的系统中。这是我的问题:我们最近遇到了sendmail程序(php用来发送电子邮件的程序)的问题,所以我修复了它。现在,如果我尝试从命令行发送电子邮件,如下所示:

echo "test email" | sendmail -v xxx.xxx@gmail.com

它正确地发送它,并得到以下结果:

LOG: MAIN
  cwd=/home/flowers_website/public_html 3 args: sendmail -v xxx.xxx@gmail.com
LOG: MAIN
  <= root@xxx.xxx.com U=root P=local S=344
[root@xxx.xxx.com www]# LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1VqQdk-00057z-UG
delivering 1VqQdk-00057z-UG
Connecting to gmail-smtp-in.l.google.com [173.194.77.26]:25 ... connected
  SMTP<< 220 mx.google.com ESMTP h5si10940958oed.70 - gsmtp
  SMTP>> EHLO xxx.xxx.com
  SMTP<< 250-mx.google.com at your service, [66.135.44.118]
         250-SIZE 35882577
         250-8BITMIME
         250-STARTTLS
         250-ENHANCEDSTATUSCODES
         250-PIPELINING
         250 CHUNKING
  SMTP>> STARTTLS
  SMTP<< 220 2.0.0 Ready to start TLS
  SMTP>> EHLO xxx.xxx.com
  SMTP<< 250-mx.google.com at your service, [66.135.44.118]
         250-SIZE 35882577
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250-PIPELINING
         250 CHUNKING
  SMTP>> MAIL FROM:<root@xxx.xxx.com> SIZE=1376
  SMTP>> RCPT TO:<xxx.xxx@gmail.com>
  SMTP>> DATA
  SMTP<< 250 2.1.0 OK h5si10940958oed.70 - gsmtp
  SMTP<< 250 2.1.5 OK h5si10940958oed.70 - gsmtp
  SMTP<< 354  Go ahead h5si10940958oed.70 - gsmtp
  SMTP>> writing message and terminating "."
  SMTP<< 250 2.0.0 OK 1386694713 h5si10940958oed.70 - gsmtp
  SMTP>> QUIT
LOG: MAIN
  => xxx.xxx@gmail.com R=lookuphost T=remote_smtp H=gmail-smtp-in.l.google.com  
[173.194.77.26] X=UNKNOWN:ECDHE-RSA-AES128-GCM-SHA256:128 C="250 2.0.0 OK 1386694713     
h5si10940958oed.70 - gsmtp"
LOG: MAIN
  Completed

但当我试图向鲜花网站发送电子邮件时,比如:

echo "test email" | sendmail -v orders@flowers_website.com

我得到这个结果:

LOG: MAIN
  cwd=/home/flowers_website/public_html 3 args: sendmail -v orders@flowers_website.com
LOG: MAIN
  <= root@xxx.xxx.com U=root P=local S=346
[root@xxx.xxx.com www]# LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1VqQkE-0005Vc-0s
delivering 1VqQkE-0005Vc-0s
LOG: MAIN
  => orders <orders@flowers_website.com> R=virtual_user T=virtual_userdelivery
LOG: MAIN
  Completed

我不知道该怎么办。上面写着已完成,sendmail根本没有日志(我甚至找不到日志文件)。我检查了/var/logs/mail.log,但它不存在/var/log/maillog包含dovecot的日志,而不是sendmail。我到处找日志文件,但哪儿也找不到。所以我的问题有两部分:

A) 如何打开sendmail的日志记录?和B) 周:我强制DNS查找发送邮件吗?

我认为dns查找是个问题。它假设它在同一台服务器上,而不是。域名指向该服务器,但绑定将记录路由到另一个服务器,所有网站数据和其他内容都存储在该服务器上。仅供参考,它没有列在本地主机名文件中。

附言:我还暂时关闭了iptables,以确保它不是防火墙问题。事实并非如此。它仍然给出了相同的结果,但从未收到。

编辑

作为参考,我们服务器上没有其他网站在通过PHP发送订单确认时遇到问题。其中一个有问题,但我昨天解决了,其他人都同意了。除了这个。我认为这与DNS解析主机名或其他什么有关。。我不知道。。。

检查/var/spool/exim文件夹中是否有邮件文件。

更新此外,请检查/var/log/exim_mainlog中Exim日志中的错误。一旦sendmail命令移交给另一个Exim进程来处理消息转发(如R=virtual_user T=virtual_userdelivery所示),您将不会在sendmail输出中看到任何错误。

此外,请检查网站的MX记录(如果您的服务器和权威服务器不同,请同时在上)。如果他们在异地托管邮件,你需要确保cPanel(我通过sample.example.com了解到你在使用它)知道这一点,并适当地配置Exim。

您的服务器知道Gmail.com在异地,因此连接到SMTP。然而,默认情况下,它假设本地托管的网站也将其邮件放在同一服务器上,并将其直接发送到Exim进行本地传递。

当我切换到谷歌应用程序时,我的网络主机也遇到了同样的问题——服务器发送的邮件仍在Exim中排队。我的主持人不得不做一些事情(因为我无法访问cPanel的WHM,我不知道是什么)来阻止它这样做。