It is possible to prevent visitors from subscribing with a free email (with domains such as gmail.com, hotmail.com, facebook.com, etc). 

To do so, we'll use the WisePops JS callbacks feature to download a list of free email providers, and ensure that the listed domains are not used in the email field.

Step 1: 

From our editor, create a new JS callback listening for the event Before popup display:

Step 2:

Copy/paste the following snippet in the script area:

// Get list of free email domains
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://wisepops.gitlab.io/free-email-providers/list.txt', true);
xhr.onload = function () {
  if (xhr.status === 200) {
    window.wisepopsFreeEmailDomains = xhr.responseText.split("\n");
  }
};
xhr.send();

When the popup is being displayed, we will load the list of free email providers from a public resource maintained by WisePops.

The list is loaded asynchronously - meaning that it won't delay the popup.

Step 3:

Create a second callback listening for the Before form submit event.

Step 4:

Copy/paste the following snippet into the callback's script:

// Prevent sign-up with a free email
// This script uses the list fetched by the before-popup-display callback
var isFreeEmail = false;
var emailField = event.target.elements['email'];
var emailParts = emailField.value.split('@');
if (emailParts.length === 2 && window.wisepopsFreeEmailDomains) {
  isFreeEmail = window.wisepopsFreeEmailDomains.indexOf(emailParts[1]) > -1;
}
if (isFreeEmail) {
  emailField.setCustomValidity('Please use a professional email.');
} else {
  emailField.setCustomValidity('');
}



Here we will try to match the filled email domain against the previously fetched lists. If a match is found, we will display this error message: "Please use a professional email.” 

And voila! You final config should look like this:

You can learn more about how to write custom validations for your forms here.

Did this answer your question?