2010-06-09 76 views
0

我有下面的代码工作的一些服务器上和别人不工作:PHP的邮件功能无法发送邮件到某些服务器

$Name = "myname"; //senders name 
      $email_sender = "[email protected]"; //senders e-mail adress 
      $recipient = $email; //recipient 
      $mail_body = "The text for the mail..."; //mail body 
      $subject = "Subject for reviever"; //subject 
      $header = "From: ". $Name . " <" . $email_sender . ">\r\n"; 
         $status = mail($recipient, $subject, $mail_body, $header); 
      print('ENVOI '. $status); 

的$状态变量是真实的,但我没有看到任何邮件。

+0

检查垃圾邮件文件夹? – kennytm 2010-06-09 09:02:21

+0

它是Windows还是Unix服务器?要么可能被错误配置。 – Matijs 2010-06-09 09:06:03

回答

0

这可能是也可能不是相关的,但你有一个非常简单的头,我会用类似下面的东西来替换你的头变量,看看是否改变了你的任何东西。

$headers = 'From: ' .$email_sender. "\r\n" . 
    'Reply-To: ' .$email_sender. "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 
+0

服务器是APACHE SERVER,我检查sendmail_from函数没有任何价值,然后我把[email protected],但我仍然没有看到我的收件箱中的电子邮件。 – Mamadou 2010-06-09 10:28:56

+0

嗯,我不认为使用正确的域名是localhost.com。 – Sam152 2010-06-09 10:49:01

+0

嗨,大家好,我无法解决我的邮件服务器问题!我听到了一个'PHPMAILER'回合。这可能会帮助我使用邮件php功能!有人可以告诉我更多关于这个, MERCI – Mamadou 2010-06-14 09:41:56

0

请确保您的smtp设置在相关服务器上正确。

1

$状态为true并不意味着邮件是由您的收件人收到的。这仅表示邮件功能已成功将邮件发送给本地递送代理。之后,它已经脱离了PHP的手。

的过程看起来是这样的:

  1. PHP脚本调用mail()
  2. mail()传递消息到本地邮件服务器(sendmail的,后缀,进出口等。)
  3. mail(),其成功完成'送达'电子邮件,返回TRUE
  4. 本地邮件服务器连接到收件人的邮件服务器,发送邮件
  5. 收件人的邮件服务器会执行任何操作将电子邮件收件人的收件箱中。

由于mail()返回true,这意味着至少您的发送代码是正确的,不会导致事情在这个阶段炸毁。这会在您和收件人的邮件服务器之间留下递送问题:

a)也许收件人使用灰名单(在这种情况下邮件应该最终显示)。也许你的服务器在灰名单超时时间到期之前放弃,所以从不做重试尝试。 b)你的邮件服务器被列入黑名单。您的服务器和/或其他潜在的垃圾邮件源位于同一个网络块中已添加到收件人预订的一个或多个反垃圾邮件RBL列表中。

c)也许远程服务器是非常棘手的关于头正确性和你的服务器有点太放松一个或多个头。

至少这些问题应该可以在您自己的邮件服务器的maillog中看到(通常在大多数Unix-ish系统上是/ var/log/maillog)。尝试在观看日志的同时发送测试邮件,以查看邮件如何通过系统进行。同时检查服务器的传出邮件队列(通常为mailq命令)。也许缺少的信息会停留在那里。

然后还有更大的问题:

d)远程邮件服务器被接受的消息,只是默默地折腾它,因为它标记为垃圾邮件或感染。这不能从您自己的邮件日志中检测到,因为这完全是在收件人一端完成的。你会看到的是“250 OK”的成功信息。

为此,您需要收件人帮助诊断问题。

+0

谢谢你的回应真的很清楚。我要检查maillog,在php.ini中检查邮件服务器的路径。我会回来告诉发生了什么! – Mamadou 2010-06-11 15:10:57

相关问题