mb_send_mail()在chrome上发送2封相同的邮件

时间:2015-02-06 20:05:08

标签: php google-chrome email

我的php邮件表单每次发送2封相同的邮件。

我是php的新手。我已经尝试过我可以做的事情,但到目前为止我自己找不到解决方案......

  • PHP版本为5.2.17
  • 它在Windows 8上的IE,Firefox和Safari上运行正常。
  • 使用mail()而不是mb_send_mail(),但它是一样的。
  • 我从表单收到的邮件内容似乎没问。
  • 在另一台服务器上载,但是相同。
  • 没有任何其他代码的简单代码,非常简单的HTML也无法正常工作。

    示例:mb_send_mail(“[电子邮件地址]”,“测试”,“这是测试邮件”,“来自:[电子邮件地址]”);

这是表格中的代码。

form.html

<form action="./confirm.php" method="post">
    xxxxxxxxxxxxxxxxxxxxxxxx
    <input type="submit" value="Confirm">
</form>

*使用Angular进行验证。

confirm.php

<?php
    session_start(); 
    if(!$_POST){
        header('Location: ./form.html');
    }
   foreach ($_POST as $key => $value) {
        ${$key} = $value;
        $_SESSION[$key] = $value;
    }
?>
<form action="./send.php" method="post">
    xxxxxxxxxxxxxxxxxxxxxxxx
    <input type="submit" name="submit" value="Send">
</form>

send.php

session_start();

$email_address = "xxxxx@gmail.com";
$message = "xxxxxxxxxxxxxxxxxxxxxxx";
$message .= "xxxxxxxxxxxxxxxxxxxxxxx";

mb_language("ja");
mb_internal_encoding("UTF-8");

$header = "From:".$email_address."\n";
$header .= "Reply-to:".$email_address."\n";
$header .= "Content-Type: text/plain\n";
$header .= "X-Mailer:PHP/". phpversion();

mb_send_mail($_SESSION['email'],"subjecct",$message,"From:$email_address");

session_destroy();

为什么我的代码每次发送两次邮件,我该如何解决?

2 个答案:

答案 0 :(得分:0)

session_destroy();之后,添加一些调试标记以检查此PHP是否运行两次。 例如file_put_contents('debug.txt', file_get_contents('debug.txt')+1);

它可以提供帮助。

答案 1 :(得分:0)

感谢@zairwolf提供添加调试行的建议。 现在它正常工作。

不确定哪个解决了它,因为我已经尝试了很少的东西来解决它。 我认为它可能是其中之一:

  • 添加了会话令牌,如:

    <强> confirm.php

    $token = sha1(uniqid(mt_rand(), true));
    

    <强> send.php

    $key = array_search($_POST['token'], $_SESSION['token']);
    if ($_SESSION['xxxxx']=="" || $key == false) {
      header('Location: ./error.php');
    }
    
  • 将“thankyou.php”与“send.php”分开

    我实际上在“send.php”中放了“发送程序”和“显示谢谢你html”。所以注意到可能会以某种方式将它分开。