电子邮件将不再发送PHP

时间:2015-02-18 18:05:41

标签: php email send

我制作了一个小系统来报名参加活动。这一切都像一个魅力,就像我想要的那样。但是当我今天检查它时,人们在注册参加活动后获得的确认电子邮件将不再发送。一切都像以前一样工作,但只是邮件不再发送。我在代码中添加了一些内容,然后它就不再发送了。

我添加了(!filter_var($email, FILTER_VALIDATE_EMAIL)以验证电子邮件地址是否格式正确。因此,如果电子邮件不正确,或者邮件因任何其他原因而未发送,您将被重定向到fail.html。否则,您将被重定向到succes.html。在重做变更并重复检查所有内容后,我无法找到错误的内容。任何可以告诉我代码有什么问题的人?

<?php
$connect=mysqli_connect('xxxx','xxxxx','xxxxx','xxxxxx');

if(mysqli_connect_errno($connect))
{
        echo 'Failed to connect';
}

// create a variable
$naam=$_POST['naam'];
$email=$_POST['email'];
$club=$_POST['club'];
$eten=$_POST['eten'];
$moment=$_POST['moment'];
$slapen=$_POST['slapen'];
$acro=$_POST['acro'];
$opmerkingen=$_POST['opmerkingen'];
$datum=$_POST['datum'];
$dateTime = new DateTime("now", new DateTimeZone('Europe/Brussels'));
$mysqldate = $dateTime->format("d-m-Y H:i:s");

//Execute the query


mysqli_query($connect,"INSERT INTO registered (`naam`,`email`,`club`,`eten`,`moment`,`slapen`,`acro`,`opmerkingen`) VALUES('$naam','$email','$club','$eten','$moment','$moment','$acro','$opmerkingen')");


//Mail sending function
$subject = 'Bevestiging inschrijving JWDW van ' . htmlspecialchars($_POST["naam"]);
$to = $_POST['email'];
$from = "xxxxxxx@hotmail.com";

//data
$msg = "<html>
  <body> 

    xxxxxxxxxx

  </center> 
  </body> 
</html>";       

//Headers
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: <".$from. ">" ;

mail($to,$subject,$msg,$headers);
echo "Verwerken...";

if (!filter_var($email, FILTER_VALIDATE_EMAIL)or(mysqli_affected_rows($connect) < 0)){
  echo '<script type="text/javascript">
           window.location = "fail.html"
      </script>';
  echo mysqli_error ($connect);

} elseif (mysqli_affected_rows($connect) > 0){
  echo '<script type="text/javascript">
           window.location = "succes.html"
      </script>';
}

?>

提前致谢!

Senne

1 个答案:

答案 0 :(得分:0)

php mail调试在stackoverflow上的其他地方得到了很好的解答。但是,对于您的问题“代码有什么问题?”的更一般的答案。如果有错误......

  • 用户需要重新输入数据。
  • fail.htm页面无法向用户提供有关其提交失败原因的反馈。
  • 用户可能会开始对以前积极注册的事件形成负面印象。

此外,代码易受SQL注入攻击。见How can I prevent SQL injection in PHP?

考虑使用以下逻辑重新排列代码......

  • 验证提交的数据。如果它无效,则重新显示表单,包括提交的数据和错误消息,以便用户更正。
  • 尝试更新数据库记录。如果没有记录受影响,则尝试插入db记录。如果失败,请重新显示上述表单,并解释问题。
  • 尝试发送电子邮件。如果失败,重新显示上面的表格,并在邮件中解释他们已注册,但确认电子邮件未发送,他们是否想要更改任何细节?
  • 考虑使用php函数或类来避免重复并提高清晰度。