ReCaptcha不接受任何字符串

ReCaptcha doesn't accept any string

本文关键字:字符串 任何 不接受 ReCaptcha      更新时间:2023-09-26

我第一次尝试将 recaptcha 添加到联系表单中,我已经取得了一些进展,但现在我有点卡住了。

它不允许我发送任何电子邮件,我也找不到原因。在我遇到recaptcha没有阻止错误答案的问题之前,但是在我将recaptcha代码放在表单顶部之后,它现在会显示出来并保护表单。

下面是执行的操作的代码:

<?php
        require_once('recaptchalib.php');
        $privatekey = "xxxxxxxxxxxxxxxxxxxxxx";
        $resp = recaptcha_check_answer ($privatekey,
                                    $_SERVER["REMOTE_ADDR"],
                                    $_POST["recaptcha_challenge_field"],
                                    $_POST["recaptcha_response_field"]);
        if (!$resp->is_valid) {
            // What happens when the CAPTCHA was entered incorrectly
            die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
             "(reCAPTCHA said: " . $resp->error . ")");
        } else {
        // Your code here to handle a successful verification
        if(@mail($your_email,$email_subject,$email_content)) {
            echo 'Message sent!'; }
          }
     if(!$_POST) exit;
     $email = $_POST['email'];

        //$error[] = preg_match('/'b[A-Z0-9._%-]+@[A-Z0-9.-]+'.[A-Z]{2,4}'b/i',     $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS';
        if(!eregi("@",$email )){
           $error.="Invalid email address entered";
           $errors=1;
        }
        if($errors==1) echo $error;
      else{
             $values = array ('name','email','telephone','message');
             $required = array('name','email','telephone','message'); 
             $your_email = "email@mydomain.com";
             $email_subject = "New Message from XXX: ".$_POST['subject'];
             $email_content = "New message:'n";
           foreach($values as $key => $value){
             if(in_array($value,$required)){
               if ($key != 'subject' && $key != 'telephone') {
                 if( empty($_POST[$value]) ) { 
                   echo 'PLEASE FILL IN REQUIRED FIELDS'; exit;
                 }
               }
                 $email_content .= $value.': '.$_POST[$value]."'n";
             }
           }
        if(@mail($your_email,$email_subject,$email_content)) {
            echo 'Message sent!'; 
        }
        else {
            echo 'ERROR!';
        }
     }
?>

这是表单中的代码:

 <form action="./contact.php" method="post" id="contactform">
        <?php
          require_once('./recaptchalib.php');
          $publickey = "xxxxxxxxxxxxxxxxxx"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
          <ol>
            <li>
              <label for="name">Name</label>
              <input id="name" name="name" class="text" />
            </li>
            <li>
              <label for="email">Email</label>
              <input id="email" name="email" class="text" />
            </li>
            <li>
              <label for="telephone">Telephone</label>
              <input id="telephone" name="telephone" class="text" />
            </li>
            <li>
              <label for="message">Message</label>
              <textarea id="message" name="message" rows="6" cols="50"></textarea>
            </li>
            <li class="buttons">
              <input type="image" name="imageField" id="imageField" src="images/send.gif" class="send" />
              <div class="clr"></div>
            </li>
          </ol>
 </form>

感谢您的帮助!

"不让我发送邮件"是什么意思?验证码是否失败,并且您收到"验证码输入不正确"?

还是它试图发送邮件但没有任何显示?

  1. 不要使用 eregi。不推荐使用整套 ereg 函数。我看到你在上面有一个preg_match等效物,所以改用它。如果你使用的是 PHP 5.2+,你应该改用 filter_var($email, FILTER_VALIDATE_EMAIL),这将比你的正则表达式做得更好。
  2. 不要用@来压制mail()通话。邮件本身不会输出任何错误消息,它只会返回真/假。检查该返回值,如果为 false,则输出错误消息。目前,你只有在它是真的时才输出。
  3. 检查您的SMTP服务器日志,如果您有权访问它,假设PHP和邮件实际上正在工作并试图交出邮件。也许SMTP服务器出现故障,邮件卡在传出队列中

毕竟,您似乎正在尝试发送带有$your_email$email_subject等的邮件...在设置这些变量并从 $_POST 中检索值之前。因此,您很可能正在使用空变量调用mail(),而空变量什么也不做。

相关文章: