我主持了一堆网站,其中一个是网上花店。他们使用一个名为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,我不知道是什么)来阻止它这样做。