我编写了一个脚本,如果表单失败,用户会看到一条错误消息,并且应该向我发送一封电子邮件。但是,我没有收到电子邮件。我没有看到我的脚本有任何错误,电子邮件无处可寻(甚至没有垃圾邮件)。可能是什么问题?我相信我们正在开发Linux服务器,所以默认情况下应安装一个Mail代理,对吗?防火墙可以阻止消息吗?
代码:
<?php
if (isset($aErrors) && count($aErrors) > 0 ) {
print '<ul class="errorlist">';
foreach ( $aErrors as $error ) {
print '<li>' . $error . '</li>';
}
print '</ul><br />';
$mail_ontv = "info@example.com";
$_POST['onderwerp'] = "Geen Twinfield Abonnement";
// set datum
$datum = date("d.m.Y H:i");
// set ip
$ip = $_SERVER['REMOTE_ADDR'];
$inhoud_mail .= $_SERVER['SCRIPT_URI'] . "\n\n";
$inhoud_mail .= "Iemand probeerde zich aan te melden, maar had geen Twinfield abonnement!\n";
$inhoud_mail .= "Bedrijfsnaam: " . $_SESSION['bedrijfsnaam'] . "\n";
$inhoud_mail .= "Telefoonnummer: " . $_SESSION['telefoonnummer'] . "\n";
$inhoud_mail .= "E-mail adres: " . $_SESSION['email'] . "\n";
$inhoud_mail .= "Telefoonnummer contactpersoon: " . $_SESSION['telefoonnummercontact'] . "\n";
$inhoud_mail .= "E-mail adres contactpersoon: " . $_SESSION['emailcontact'] . "\n";
$inhoud_mail .= "Gewenste gebruikersnaam: " . $_SESSION['gebruikersnaam'] . "\n";
$inhoud_mail .= "Gekozen abonnement: " . $_SESSION['abonnement'] . "\n\n";
$inhoud_mail .= "Verstuurd op " . $datum . " via het ip " . $ip . "\n\n";
$headers = "From: " . $_SESSION['bedrijfsnaam'] . " <" . $_SESSION['emailcontact'] . ">";
$headers = stripslashes($headers);
$headers = str_replace("\n", "", $headers); // Verwijder \n
$headers = str_replace("\r", "", $headers); // Verwijder \r
$headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
$_POST['onderwerp'] = str_replace("\n", "", $_POST['onderwerp']); // Verwijder \n
$_POST['onderwerp'] = str_replace("\r", "", $_POST['onderwerp']); // Verwijder \r
$_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers);
}
?>
谢谢你们!
答案 0 :(得分:5)
除了Mac B建议之外,还有一些额外的想法:
1)有许多PHP库可以为您发送电子邮件。它们可以与本地或远程SMTP服务器一起使用。例如,http://swiftmailer.org/。
2)如今,大多数电子邮件提供商(Gmail,Yahoo等)都会阻止来自本地计算机的电子邮件。我建议使用便宜的第三方SMTP服务来发送您的电子邮件 - 这将有助于提高可靠性。我多年来一直使用的是CritSend(critsend.com)。还有很多其他的。
答案 1 :(得分:2)
您是否检查了mail()
的返回值?如果你得到一个布尔值为fALSE,那么在PHP尝试将电子邮件处理到你的SMTP服务器时会出现问题。
如果邮件返回true,则切换成功,您必须查看SMTP服务器的日志,以了解该点发生的电子邮件。
请记住:PHP参与发送电子邮件,在现实世界中相当,它正在把信封放到邮箱中。而已。其他一切完全超出了PHP的权限和控制范围。