为什么我的表单不能在一台服务器上运行。但另一方面呢?

时间:2014-04-22 08:20:25

标签: php forms sendmail

我使用了两个虚拟主机。在其中一个主机上,它将让我使用我的表单并接收每封邮件的输入。另一位主持人会告诉我它已被发送但我没有收到任何东西。

我在这里环顾四周,我唯一能找到的就是它可能与PHP的sendmail有关,虽然我查看了两者的phpinfo()并且它们是相同的(sendmail_from no价值没有价值 sendmail_path / usr / sbin / sendmail -t -i)

任何人都可以了解我在这里做错了什么或我应该采取什么步骤?

P.S:

我知道这不是表格的最佳做法,只需要非常简单和有效。

HTML:

<form method="post" action="formulierverzenden.php">
<ul>
<li>Je voornaam *</li>
<li><input type="text" name="voornaam" /></li>
<li>Je achternaam *</li>
<li><input type="text" name="achternaam" /></li>
<li>Je e-mail adres *</li>
<li><input type="text" name="email" /></li>
<li>Je berichtje *</li>
<li><textarea cols="50" rows="12" name="bericht"></textarea></li>
<li><input type="reset" value="Begin opnieuw" /> <input type="submit" name="versturen" value="Verstuur bericht" /></li>
</ul>
<p>Alle velden gemarkeerd met een * zijn verplicht.</p>
</form>

PHP:

    <?php
$naar = 'ik@marcianoplanque.nl'; // Waar moet het naartoe?
$onderwerp = 'Contactformulier (je site)'; // Het onderwerp van het bericht

// Header instellen, zodat nl2br() werkt
$headers = "MIME-version: 1.0\r\n"; 
$headers .= "content-type: text/html;charset=utf-8\r\n";

if(isset($_POST['versturen'])) // Als het formulier verzonden is door op de verzend knop te klikken
{
  $voornaam = trim($_POST['voornaam']); // Alle overbodige spaties uit het voornaam veld verwijderen
  $achternaam = trim($_POST['achternaam']); // Alle overbodige spaties uit het achternaam veld verwijderen
  $email = trim($_POST['email']); // Alle overbodige spaties uit het email veld verwijderen
  $bericht = trim($_POST['bericht']); // Alle overbodige spaties uit het bericht veld verwijderen
  $fout = false; // Om te kijken straks of er wat fout is

  if(empty($voornaam)) // Als het voornaam veld niet is ingevuld
  {
    print '<p>Helaas, het voornaam veld is verplicht maar is nu niet ingevuld!</p>';
    $fout = true; // Zorgen dat het script zometeen weet dat er wat fout is
  }
  if(empty($achternaam)) // Als het achternaam veld niet is ingevuld
  {
    print '<p>Helaas, het achternaam veld is verplicht maar is nu niet ingevuld!</p>';
    $fout = true; 
  }
  if(empty($email)) // Als het email veld niet is ingevuld
  {
    print '<p>Helaas, het email veld is verplicht maar is nu niet ingevuld!</p>';
    $fout = true;
  }
  if(!filter_var($email, FILTER_VALIDATE_EMAIL)) // Als het email adres niet correct is
  {
    print '<p>Helaas, het email adres is niet correct!</p>';
    $fout = true;
  }
  if(empty($bericht)) // Als het bericht veld niet is ingevuld
  {
    print '<p>Helaas, het bericht veld is verplicht maar is nu niet ingvuld!</p>';
    $fout = true;
  }

  if($fout == false) // Als er niks fout is (alles is dus netjes ingevuld)
  {
    $headers .= 'From: ' . $voornaam . ' ' . $achternaam . '<' . $email . '>'; // Een afzender instellen zodat je kan reageren.

    if(mail($naar, $onderwerp, nl2br($bericht), $headers))
    {
      print '<p>Het bericht is succesvol verzonden!</p>';
    }
    else
    {
      print '<p>Helaas, er is wat fout gegaan tijdens het verzenden van het formulier.</p>';
    }
  }
}
?>

1 个答案:

答案 0 :(得分:0)

有各种各样的东西可能会出错,但是如果它在一台服务器上运行而在另一台服务器上运行,则不太可能是你的代码,特别是对于这样的东西,PHP版本不会很大的不同。

这听起来像服务器配置,并且有很多事情可能会出错。第一步:查看日志。 Syslog,一如既往,PHP错误日志,sendmail日志。看看是否有任何错误,谷歌他们,追踪他们。您可以使用sendmail命令行工具从有问题的服务器发送邮件吗?这只是一个缩小现在和不起作用的过程。

我的疯狂猜测:邮件正在排队到sendmail(因此PHP正在完成其工作并返回“全部完成,一切顺利”消息),但有些事情阻止了sendmail实际发送邮件(端口)被阻止,也许?),所以消息只是等待发送的本地队列。

这可能不对,因为这是一个疯狂的猜测,但它可能是你会发现的问题类型。