首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将recaptcha添加到邮件表单

如何将recaptcha添加到邮件表单
EN

Stack Overflow用户
提问于 2019-04-10 19:07:08
回答 1查看 61关注 0票数 -1

一位已故朋友的妻子的网站被滥用来发送垃圾邮件。这可能是因为注册表中没有使用ReCaptcha。该网站使用Joomla 3.9。

我想添加ReCaptcha,但我不知道如何才能做到。

我希望有人能帮上忙。

我自己没有尝试过任何东西,因为我对PHP的了解还不够好,无法完成这项工作。

表单如下所示:

代码语言:javascript
复制
<form id="form1" action="/script/mailforms/mailsend.php" enctype="multipart/form-data" method="post"><input name="redirect" type="hidden" value="/bedankt" />
 <table border="0" width="200">
 <tbody>
 <tr>
 <td> </td>
 <td><strong>Gegevens ouder/verzorger</strong></td>
 <td> </td>
 <td> </td>
 <td><strong>Gegevens kind</strong></td>
 </tr>
 <tr>
 <td>Voornaam</td>
 <td><span id="sprytextfield1"> <label for="Naam"></label> <input id="Naam" name="Naam" type="text" /> </span></td>
 <td> </td>
 <td>Naam kind</td>
 <td><span id="sprytextfield9"> <label for="Naam Kind"></label> <input id="Naam Kind" name="Naam Kind" type="text" /> </span></td>
 </tr>
 <tr>
 <td>Achternaam</td>
 <td><span id="sprytextfield2"> <label for="Achternaam"></label> <input id="Achternaam" name="Achternaam" type="text" /> </span></td>
 <td> </td>
 <td>Geslacht</td>
 <td><span id="spryradio1"> <label> <input id="Geslacht_0" name="Geslacht" type="radio" value="Jongen" /> jongen</label> <br /> <label> <input id="Geslacht_1" name="Geslacht" type="radio" value="Meisje" /> meisje</label> <br /> </span></td>
 </tr>
 <tr>
 <td>Straat + nr</td>
 <td><span id="sprytextfield3"> <label for="Straat en nr"></label> <input id="Straat en nr" name="Straat en nr" type="text" /> </span></td>
 <td> </td>
 <td>Geboortedatum</td>
 <td><span id="sprytextfield10"> <label for="Geboortedatum"></label> <input id="Geboortedatum" name="Geboortedatum" type="text" /> </span></td>
 </tr>
 <tr>
 <td>Postcode</td>
 <td><span id="sprytextfield4"> <label for="Postcode"></label> <input id="Postcode" name="Postcode" type="text" /> </span></td>
 <td> </td>
 <td>Schoolnaam</td>
 <td><span id="sprytextfield11"> <label for="Schoolnaam"></label> <input id="Schoolnaam" name="Schoolnaam" type="text" /> </span></td>
 </tr>
 <tr>
 <td>Woonplaats</td>
 <td><span id="sprytextfield5"> <label for="Woonplaats"></label> <input id="Woonplaats" name="Woonplaats" type="text" /> </span></td>
 <td> </td>
 <td>Voorkeur</td>
 <td><span id="spryradio2">  <br /> <label> <input id="Voorkeur_1" name="Voorkeur" type="radio" value="Woensdag" /> Woensdagmiddag (Zonnestudio)</label> <br /> </span></td>
 </tr>
 <tr>
 <td>Telefoonnr</td>
 <td><span id="sprytextfield6"> <label for="Telefoonnr"></label> <input id="Telefoonnr" name="Telefoonnr" type="text" /> </span></td>
 <td> </td>
 <td> </td>
 <td> </td>
 </tr>
 <tr>
 <td>Email</td>
 <td><span id="sprytextfield7"> <label for="Email"></label> <input id="Email" name="Email" type="text" /> </span></td>
 <td> </td>
 <td>Bijzonderheden</td>
 <td><span id="sprytextarea1"> <label for="Bijzonderheden"></label>      <textarea id="Bijzonderheden" cols="45" name="Bijzonderheden" rows="5">     </textarea> </span></td>
 </tr>
 <tr>
 <td>Bank/gironr</td>
 <td><span id="sprytextfield8"> <label for="Bankgiro"></label> <input id="Bankgiro" name="Bankgiro" type="text" /> </span></td>
 <td> </td>
 <td> </td>
 <td> </td>
 </tr>
 <tr>
 <td> </td>
 <td colspan="4"><br /><span id="sprycheckbox1"> <input id="Algemene Voorwaarden" name="Algemene Voorwaarden" type="checkbox" /> </span>Ik heb de de <strong><a href="over-de-zwemschool/algemene-voorwaarden-de-zwemschool" target="_blank" rel="noopener noreferrer">algemene voorwaarden</a></strong> gelezen en ga hiermee akkoord</td>
 </tr>
 <tr>
 <td> </td>
 <td><input id="Verzenden" name="Verzenden" type="submit" value="Verzenden" /></td>
 <td> </td>
 <td> </td>
 <td> </td>
 </tr>
 </tbody>
 </table>
</form>

下面是mailsend.php:

代码语言:javascript
复制
<?php   
require('class.mailer.info.php');

//phpinfo();

/* Vaste post waarden vastleggen */
// ontvanger
if(empty($_POST['redirect']))
{   
    die("error: geen ontvanger vastgelegd en redirect pad.");
}


// Instantiate your new class
$mail = new HeartmedicalMailer;

/*
Verwerken post informatie
*/
$body_text = '';

// waardes die je niet wilt tonen wegfilteren als redirect / receipient etc.
$excluded = array('redirect');

// html opmaak formulier voor loop
$body_text .= "<style>body{ font-family:Verdana, Arial; font-size:11px; color:#000000; }</style>";

// loop doorlopen met opmaak
foreach($_POST as $key => $value)
{
    // vaste waardes wegfilteren
    if(!in_array($key, $excluded))
    {
        if(!empty($value))
        {   
            $key = preg_replace('#_#',' ', $key);

            $body_text .= '<strong>'.$key.'</strong>:  '.$value.'<br>';
        }
    }
}   

// Now you only need to add the necessary stuff
$mail->Body = $body_text;

if(!$mail->Send())
{
    echo "Mailer Error: " . $mail->ErrorInfo;
    die("There was an error sending the message #code1");
} 

// redirect
header("Location: ".$_POST['redirect']." ");        
?>

下面是class.mailer.info.php:

代码语言:javascript
复制
<?php
// class phpmailer
require("../phpmailer/class.phpmailer.php");

class HeartmedicalMailer extends PHPMailer 
{
    // Set default variables for all new objects
    var $From     = "xxxxx@xxxxx.nl";
    var $FromName = "De Zwemschool";
    var $Host     = "localhost";
    /* smtp auth */
    var $Mailer   = "smtp"; // Alternative to IsSMTP()
    var $SMTPAuth = false;     // turn on SMTP authentication
    var $Username = "";  // SMTP username
    var $Password = ""; // SMTP password

    var $WordWrap = 75;
    var $Subject  = "Inschrijving De Zwemschool";

    function HeartmedicalMailer() 
    {

                    $this->AddAddress('xxxx@xxxx.nl', 'Name');


        $this->IsHTML(true);
    }

    // Replace the default error_handler
    function error_handler($msg) {
        print("Mailer Error");
        print("Description:");
        printf("%s", $msg);
        exit;
    }
}
?>

我想要用recaptcha发送的表格

EN

回答 1

Stack Overflow用户

发布于 2019-04-10 19:28:19

你可以使用Google reCAPTCHA。

我个人使用的是reCAPTACHA V2隐形版本,所以你可以在下面找到一个例子。

首先在这里获取密钥:link

然后将您的提交输入替换为以下内容:

代码语言:javascript
复制
<button class="g-recaptcha form-control" data-sitekey="YOUR_RECAPTCHA_KEY" data-callback='onSubmit'>Send</button>

然后将这些脚本添加到您的HTML页面:

代码语言:javascript
复制
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
  function onSubmit(token) {
    document.getElementById("form1").submit();
  }
</script>

最后,在mailsend.php的开头添加以下内容

代码语言:javascript
复制
    function get_ip() {
        // IP if shared network
        if (isset($_SERVER['HTTP_CLIENT_IP'])) {
            return $_SERVER['HTTP_CLIENT_IP'];
        }
        // IP behind proxy
        elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        // Sinon : normal IP
        else {
            return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
        }
    }

    // Anti spam using google Captcha
    $post_params = [
        'secret'    => "YOUR",
        'response'  =>  $_POST['g-recaptcha-response'],
        'remoteip'  => get_ip()
    ];
    # Create a connection
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $ch = curl_init($url);
    # Form data string
    $post_string = http_build_query($post_params, '', '&');
    # Setting our options
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    # Get the response
    $response = curl_exec($ch);
    $response = json_decode($response);
    curl_close($ch);

    if(!$response->success){
        exit();
    } 

希望它能有所帮助;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55611054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档