2012-07-27 132 views
2

我写了一个脚本,如果表单失败,用户会看到一条错误消息,并且应该向我发送一封电子邮件。但是,我没有收到电子邮件。我在脚本中看不到任何错误,并且无法找到电子邮件(甚至没有发现垃圾邮件)。可能是什么问题?我相信我们正在开发Linux服务器,所以默认情况下应该安装邮件代理,对吧?防火墙可以阻止这些消息吗?发送PHP邮件

代码:

<?php 

if (isset($aErrors) && count($aErrors) > 0) { 
     print '<ul class="errorlist">'; 
     foreach ($aErrors as $error) { 
      print '<li>' . $error . '</li>'; 
     } 
     print '</ul><br />'; 


$mail_ontv = "[email protected]"; 

$_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

我猜它必须做你的头。在它们传递到你的'mail()'函数之前,它们看起来像什么? – Crontab 2012-07-27 19:41:25

回答

2

您是否检查了mail()的返回值?如果你得到一个布尔错误,当PHP试图处理电子邮件到你的SMTP服务器时,一些东西就爆发了。

如果邮件返回true,那么切换成功,您将不得不查看SMTP服务器的日志以了解此时发生的电子邮件事件。

请记住:PHP参与发送电子邮件,在现实世界中是等同的,将信封放入邮箱。而已。其他一切完全不在PHP的权限和控制范围之内。你

+0

我做了一个变量转储,结果是'bool(true)',这是否意味着它不是我的PHP代码不工作? – user1555076 2012-07-27 19:58:34

+0

这意味着PHP完成了它的工作,并将电子邮件交给了SMTP服务器。所以去看看smtp服务器的日志,看看发生了什么。 – 2012-07-27 19:59:20

5

一些额外的想法超出了苹果乙建议:

1)有很多PHP库在那里,将采取发送电子邮件给你的照顾。他们可以使用本地或远程SMTP服务器。例如,http://swiftmailer.org/。 2)现在大多数电子邮件提供商(Gmail,Yahoo等)都会阻止来自本地计算机的垃圾邮件。我建议使用廉价的第三方SMTP服务来发送您的电子邮件 - 这将有助于提高可靠性。我多年来使用的一个名为CritSend(critsend.com)。还有很多其他的。

+0

谢谢,我将检查我是否可以解决我们某些SMTP服务器记录的问题,但我会牢记这一点! – user1555076 2012-07-27 20:10:21

+0

critsend看起来很酷+1 – tubaguy50035 2012-08-14 20:11:55