我使用了两个虚拟主机。在其中一个主机上,它将让我使用我的表单并接收每封邮件的输入。另一位主持人会告诉我它已被发送但我没有收到任何东西。
我在这里环顾四周,我唯一能找到的就是它可能与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>';
}
}
}
?>
答案 0 :(得分:0)
有各种各样的东西可能会出错,但是如果它在一台服务器上运行而在另一台服务器上运行,则不太可能是你的代码,特别是对于这样的东西,PHP版本不会很大的不同。
这听起来像服务器配置,并且有很多事情可能会出错。第一步:查看日志。 Syslog,一如既往,PHP错误日志,sendmail日志。看看是否有任何错误,谷歌他们,追踪他们。您可以使用sendmail命令行工具从有问题的服务器发送邮件吗?这只是一个缩小现在和不起作用的过程。
我的疯狂猜测:邮件正在排队到sendmail(因此PHP正在完成其工作并返回“全部完成,一切顺利”消息),但有些事情阻止了sendmail实际发送邮件(端口)被阻止,也许?),所以消息只是等待发送的本地队列。
这可能不对,因为这是一个疯狂的猜测,但它可能是你会发现的问题类型。