【问题标题】:Email won't send anymore with PHP [duplicate]不再使用 PHP 发送电子邮件 [重复]
【发布时间】:2023-04-10 23:47:02
【问题描述】:

我做了一个小系统来注册一个活动。这一切都像一个魅力,正是我想要的方式。但是当我今天突然检查它时,人们在注册活动后收到的确认电子邮件不再发送了。一切都以与以前相同的方式工作,但只是不再发送邮件。我在我的代码中添加了一些东西,然后它就不再发送了。

我添加了(!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>';
}

?>

提前致谢!

塞内

【问题讨论】:

  • 所以删除代码更改,然后它会再次工作吗?
  • 为什么还要向浏览器发送javascript告诉它从服务器重定向到另一个页面?使用php代码header('Location: fail.html')
  • 在将电子邮件存储到数据库之前以及尝试使用它发送电子邮件之前,您也不应该检查电子邮件的有效性。
  • 您需要对 cme​​ts 更加敏感。问完你的问题后你不应该走开,因为你不能对问题和cmets做出反应。当你回来时,你接受帮助的窗口已经缩小或消失了。
  • @JohnConde,在评论中写下所有建议会让他无法阅读。这就是为什么我将其发布为答案。在他提供更多信息后,我可以对其进行编辑并更新我的答案。这就是我试图通过发布我的建议来解决问题的方法,作为答案。无论如何,既然你指出,我正在删除我的答案。谢谢

标签: php email send


【解决方案1】:

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

  • 用户需要重新输入他们的数据。
  • fail.htm 页面无法向用户反馈提交失败的原因。
  • 用户可能开始对他们之前积极注册的事件产生负面印象。

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

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

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

【讨论】:

  • 这似乎没有回答原始问题...这些都是好点,但答案部分旨在完整回答 original 问题,而不是关于UX 设计和 SQL 注入。
猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
相关资源
最近更新 更多