2011-05-27 167 views
13

我正在尝试在我的服务器上使用php mail()函数。奇怪的是,它返回true,但我没有收到我的电子邮件收件箱中的任何东西。mail()失败,但返回true

然而,cpanel邮件转发器工作正常。

因此,prolly它不是一个配置的东西,因为转发给我的电子邮件?

我尝试添加在:

ini_set("sendmail_from", "[email protected]"); 

但没有奏效。

这里是我的代码:

$subject = "My Subject"; 
$body = "Email Body "; 
$headers = 'From: [email protected]' . "\r\n" . 
    'Reply-To: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

if (mail($email,$subject,$body,$headers)) 
    echo "Sent!"; 
else 
    echo "Fail!"; 
+6

需要注意的一件事:“重要的是要注意,仅仅因为邮件被接受发送,并不意味着邮件实际上会到达预定的目的地。” – 2011-05-27 19:37:47

+2

检查您的SMTP服务器的邮件日志。它会解释为什么邮件没有被传送。 – 2011-05-27 19:46:10

+0

当我的某些电子邮件出于某种原因被列为垃圾邮件时,我遇到了goDaddy共享主机的问题。我不知道他们是如何生成这个列表的,但它是完整的和完全的bs。您的服务器可能有同样的问题。请在这里阅读:http://community.godaddy.com/groups/email/forum/topic/not-receiving-all-of-my-e-mails/ - 也许您在尝试使用的电子邮件时遇到了几个问题发送消息。 “最常见的情况是发送邮件服务器从公共邮件列表(如senderbase.org)发送邮件信誉不佳的IP地址的可能性” – 2011-05-27 19:51:31

回答

6

还有的可能会导致此问题的原因万千。这里有几个:

  1. 收到邮件,但标记为垃圾邮件。
  2. 收件人地址不正确。
  3. 发送邮件服务器上存在缓慢的邮件队列。
  4. 接收邮件服务器上存在缓慢的邮件队列。

mail()当传出邮件服务器接受传送邮件时返回true。您需要排除其他可能性以找出故障点。

+0

正确。可能几天后你会收到一条消息。 – Tadeck 2011-05-27 19:47:04

+0

天后?? !!,时间移动到sendgrid或其他东西 – 2017-11-28 11:21:14

1

我有一个脚本,我正在使用的是发送和接收在同一个域的这个问题。您是否尝试将电子邮件发送到驻留在不同域中的电子邮件地址?这可能有助于缩小可能的问题。

4

mail()函数很少返回除true以外的任何其他值。它只关心它成功给MTA(邮件传输代理 - 即实际发送它的程序)的邮件。

MTA只会在电子邮件格式不正确的情况下立即拒绝电子邮件。在这种情况下,您将在PHP中遇到错误。但它也可以拒绝电子邮件,或者在PHP接受电子邮件后发送失败,原因很多,其中PHP不会有任何想法,因为它已经收到了true响应。

您的MTA将有一个错误日志,如果错误发生在本地,您可以检查更多信息。

1

我们遇到了完全相同的问题。解决方案是在php.ini中设置适当的sendmail_path。

sendmail_path = “/ usr/sbin目录/ sendmail的-t -i”

设置上述问题得到了解决。

1

检查mail.log发送测试邮件后:

sudo tail -f /var/log/mail.log 

然后,你可以看到分配给您试图向其发送的最后一封电子邮件的ID。例如。我看到:

Jan 11 23:03:14 vagrant-ubuntu-trusty-64 postfix/pickup[17228]: 69F3441529: uid=33 from=<www-data> 

69F3441529是分配给该电子邮件中的唯一ID。然后,您可以grep日志中有ID的所有行...

sudo grep 69F3441529 /var/log/mail.log 

然后,您应该能够发现可能存在的任何错误信息,那么谷歌他们:)

0

在我情况下,将服务器设置从IPv6地址更改为IPv4地址解决了问题。

相关问题