PHP Mail函数发送了重复的电子邮件

时间:2016-09-14 19:39:33

标签: php html-email

我构建了一个带有reCaptcha验证的表单,我的设置被发送电子邮件一式两份,并从Office发送垃圾邮件。

我的错误是什么?

一切正常,但事实是当表格填写时,我们当时收到了2封电子邮件。

<?php
if (isset($_POST["submit"])) {

    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $privatekey = "******";

    $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']);
    $data = json_decode($response);

    if(isset($data->success) AND $data->success==true){

        $to = "whois@sent.this";
        $emailfrom = $_POST['email'];
        $email = $_POST['email'];
        $nom = $_POST['nom'];
        $phone = $_POST['phone'];
        $subject = "Formulaire de Contact Web  ";
        $commentaire = $_POST['commentaire'];

        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
        $headers .= "Reply-to: $emailfrom";

        $message = "
         <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
        <html>
        <head>
        <title>Appel de service  (rempli sur le site internet)</title>
        <meta charset=\"UTF-8\">
        <style type=\"text/css\">
        h1,h2,h3,h4,h5,h6 {
            font-family: Cambria, \"Hoefler Text\", \"Liberation Serif\", Times, \"Times New Roman\", serif;
            color: #272727;
        }
        </style>
        </head>
        <body>
        <h2 style=\"font-size: 1.25em; font-family: Gotham, ʼHelvetica Neueʼ, Helvetica, Arial, sans-serif;\">Vous avez re&ccedil;u une demande de contact sur votre site internet. </h2>
        <br>
        <table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\">
          <tbody>
            <tr>
              <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Formulaire de contact Copiscan.com</h3></td>
            </tr>
            <tr>
              <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom</td>
              <td width=\"313\" align=\"left\" valign=\"middle\">$nom</td>
            </tr>
            <tr>
              <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Téléphone</td>
              <td width=\"313\" align=\"left\" valign=\"middle\">$phone</td>
            </tr>
            <tr>
              <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse courriel</td>
              <td align=\"left\" valign=\"middle\">$email</td>
            </tr>
            <tr bgcolor=\"#D5D5D5\">
              <td colspan=\"2\" align=\"left\" valign=\"middle\">Commentaire :</td>
            </tr>
            <tr>
              <td height=\"75\" colspan=\"2\" align=\"left\" valign=\"top\">$commentaire</td>
            </tr>
          </tbody>
        </table>
        </body>
        </html>
         ";
// Always set content-type when sending HTML email
mail($to, $subject, $message, $headers); 

        // so on...all your mail parameters here


        if(mail($to, $subject, $message, $headers)){
                    header('Location: contactez-nous.php?CaptchaPass');

        }else{
            echo "mail could not be sent";
        }
    }else{
                header('Location: contactez-nous.php?CaptchaFail');
    }

}else{
    header('Location: contactez-nous.php?CaptchaError');

}

?> 

3 个答案:

答案 0 :(得分:2)

双重函数调用mail

// Always set content-type when sending HTML email
mail($to, $subject, $message, $headers); 

        // so on...all your mail parameters here
        if(mail($to, $subject, $message, $headers)){

试试这个:

// Always set content-type when sending HTML email
$mailOk = mail($to, $subject, $message, $headers); 

        // so on...all your mail parameters here
        if($mailOk){

或其他方式:

// Always set content-type when sending HTML email
// Remove this line --> mail($to, $subject, $message, $headers); 

        // so on...all your mail parameters here
        if(mail($to, $subject, $message, $headers))){

答案 1 :(得分:1)

你有

// Always set content-type when sending HTML email
mail($to, $subject, $message, $headers); 
    // so on...all your mail parameters here


    if(mail($to, $subject, $message, $headers)){
                header('Location: contactez-nous.php?CaptchaPass');

    }else{
        echo "mail could not be sent";
    }

if语句中的第二个邮件(...)不仅评估邮件是否已成功发送,还发送邮件。因此,删除第一封邮件(...)并将其保留在if语句中。

答案 2 :(得分:1)

它到达时发送的第一封电子邮件

// Always set content-type when sending HTML email
mail($to, $subject, $message, $headers);

和第二封电子邮件到达时检查

if(mail($to, $subject, $message, $headers)){

只需删除第一个邮件功能即可解决问题。