DEV Community

Discussion on: reCaptcha verification with EmailJS

 
jameswallis profile image
James Wallis • Edited

No problem at all.

I’ve had a look your code and done a bit of research on Nuxt to understand it a bit better.

You’re using .sendForm and passing the e.target as the third parameter. AFAIK Recaptcha only works with the .send function.

So this is what I’d suggest:

  1. Change .sendForm to be .send
  2. For the third parameter pass an object, the keys need to be the same as your EmailJS template. I’ll assume they’re name, email and message. Then add another key: g-recaptcha-response.
  3. Add an ID to the two inputs and text areas, something like id=“form-name” etc.
  4. Populate the object using document.getElementById(). So the EmailJS parameter object and .send function should roughly look like:
const emailsJSParams = {
    name: document.getElementById('form-name').value,
    email: document.getElementById('form-email').value,
    message: document.getElementById('form-message').value,
    'g-recaptcha-response': yourCaptchaResponse,
}

emailjs
        .send(
          'service_bt8lbbb',
          'mcea_contact_form',
          emailsJSParams,
          'user_ddB1kBYjUr7bhz87JDRm5'
        )
Enter fullscreen mode Exit fullscreen mode

I’ve not tested that code block but it should at least put you on the right track!

Let me know how you get on and if you need further assistance.

Thanks, James

Thread Thread
 
xr0master profile image
Sergey Khomushin

To be honest, the captcha was made for sendForm method, since the captcha is usually part of the form. However, the send method can send any params, including the captcha token.
By the way, this is why the name of the parameter is so strange (g-recaptcha-response), this is the default name from reCAPCHA.

Thread Thread
 
jameswallis profile image
James Wallis

Ah is that right? I ended up using send as I wanted to show the reCaptcha after the form was submitted but before querying EmailJS.
Additionally, I wasn't able to find a guide to use reCaptcha with sendForm whereas I could find one for send emailjs.com/docs/rest-api/send/. Looking again at the docs and your comment I guess that you literally just put the reCaptcha inside the form element and EmailJS will get it out of e.target.

Thread Thread
 
xr0master profile image
Sergey Khomushin

Yeah, you guess correctly.