【问题标题】:PHP Mail sending email on page refreshPHP Mail 在页面刷新时发送电子邮件
【发布时间】:2021-01-26 08:03:38
【问题描述】:

喂!

对此的任何帮助将不胜感激!我有一个联系表格,它在页面刷新时发送电子邮件。我已经尝试了很多东西,但没有得到任何结果。这是我到目前为止所得到的:

if(isset($_POST['email']) && $_POST['email'] != '') {

  if( filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ){

    $userName = $_POST['name'];
    $userEmail = $_POST['email'];
    $messageSubject = $_POST['subject'];
    $message = $_POST['message'];

    $to = "email@gmail.com";
    $body = "";

    $body .= "From: " .$userName. "\r\n";
    $body .= "Email: " .$userEmail. "\r\n";
    $body .= "Message: " .$message. "\r\n";
    header('Location: http://www.website.net/contact-thank-you.html');
    exit();
    mail($to, $messageSubject, $body);

    
  }

  }

?>

【问题讨论】:

    标签: php forms email contacts


    【解决方案1】:

    防止这种情况发生的最简单方法是在电子邮件发送后redirect to a new URL。网站通常会重定向到“谢谢”页面。

    您也许可以通过重定向到相同的 URL 来侥幸(这不会发送第二封电子邮件,因为 $_POST 将是空的)。

    另一种方法是使用用户会话 ($_SESSION) 来跟踪电子邮件是否已发送,如果您检测到 $_SESSION 表明它已发送,则不要再次发送电子邮件。您也可以出于同样的目的使用 cookie。最后但同样重要的是,您可以将该信息存储在数据库中并在发送电子邮件之前检查数据库,这样您就不会发送多封电子邮件。

    【讨论】:

    • 顺便说一句,这被称为Post/Redirect/Get 模式。
    • 好的,当我重定向到一个新的 URL 时,我需要创建一个 html 页面吗?
    • @elsquidge 您可以只重定向到同一页面,因为该页面已经存在,这实际上就是现在正在发生的事情(除了使用这种新方法,重新加载不会导致发送额外的电子邮件)。为了获得更好的用户体验,如果此页面没有电子邮件已发送的确认消息,您需要添加该消息。或者,完全重定向到另一个“谢谢”页面可能更容易。
    • 在输出标题并退出之前,您必须调用mail()
    猜你喜欢
    • 2015-01-01
    • 2020-05-15
    • 2011-06-25
    • 2017-07-08
    • 1970-01-01
    • 2014-04-29
    • 2017-12-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多