【问题标题】:php sendmail not arriving at destination, not logging errors. how do i force dns lookup for sendmail?php sendmail 未到达目的地,未记录错误。我如何强制 dns 查找 sendmail?
【发布时间】:2013-12-11 01:58:56
【问题描述】:

我托管了很多网站,其中一个是在线花店。他们使用一个名为 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) 我如何强制对 sendmail 进行 DNS 查找?

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

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

编辑

作为参考,我们服务器上没有其他网站在通过 PHP 发送订单确认时遇到问题。其中一个有问题,但我昨天修好了,其余的都排好了。除了这个。我认为这与 DNS 解析主机名或其他东西有关.. 我不知道...

【问题讨论】:

    标签: php magento email sendmail


    【解决方案1】:

    检查/var/spool/exim文件夹,看看里面是否有邮件文件。

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

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

    您的服务器知道 Gmail.com 不在现场,因此连接到 SMTP。但是,默认情况下,它假定本地托管的站点也将它们的邮件放在同一服务器上,并将它们直接发送到 Exim 以进行本地传递。

    当我切换到 Google Apps 时,我的网络主机也遇到了同样的问题 - 服务器发送的邮件仍在 Exim 中排队。我的主机必须做一些事情(因为我无法访问 cPanel 的 WHM,所以我不知道是什么)来阻止它这样做。

    【讨论】:

    • 我正在强制使用 cpanel。我完全从 shell 托管我自己的私人网站。我通常不使用 cpanel,但老板坚持我尽可能使用它。此外,鲜花网站在我们的一台服务器上并转移到另一台服务器上,但 DNS 指向新服务器。因此邮件和网站托管在另一台服务器上,但它们是由该服务器指向的。仅供参考,/var/spool/exim 中没有邮件。继承人 ls: db exim-daemon.pid input msglog
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2010-10-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    相关资源
    最近更新 更多