Re: Block email suffixes from completing forms?

Mark_Farnell
Level 5
Is it possible to block certain email suffixes from completing forms (with a message to advise why) e.g. @gmail.com, @outlook.com, @competitor-domain.com?

Would it involve some form of custom script/html/code?

I assume we could not send information to these email addresses by adding them to a black list or marketing suspend them and use that in the flow of the campaign, but this doesn't look so good i.e. looks like we can't deliver the reply rather than choosing not to.  So would prefer to block these types of email addresses on entry with a validation message.
Tags (1)
13 REPLIES 13
Halid_Delkic
Level 3
Someone has kindly posted a new JavaScript code (copied below) that works with Editor 2.0 on blocking certain domains.

Although it does work, there is a chance it will play havoc with your Submit button. I was using one of the custom designs and functionality was affected. We don't have JS developers/knowledge so have removed the custom HTML. 

Here is the discussion with new code for anyone interested: https://community.marketo.com/MarketoDiscussionDetail?id=90650000000PlhSAAS

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8">
var $jQ = jQuery.noConflict();
 
var invalidDomains = 
[
"hotmail.com",
"yahoo.com",
"aol.com",
"gmail.com",
];
 
 
$jQ(document).ready(function(){
if ($jQ('.mktoButtonRow').length == 0) {
window.setTimeout(function(){
emailValidation();
}, 500);
} else {
emailValidation();
}
});
 
$jQ('#Email').bind('blur', function(){
if (isEmailValid()){
var $error = $jQ(this).parent().find('.mktoError');
if ($error.length > 0) {
$error.fadeOut(200, function(){
$error.remove();
$jQ('#Email').removeClass('mktoInvalid');
});
}
}
});
 
 
function emailValidation() {
var $buttonRow = $jQ('.mktoButtonRow');
var submitText = $buttonRow.find('button').html();
var $replacement = $jQ('<input id="replacementButton" type="button" class="mktoButton" value="' + submitText + '" />');
$buttonRow.hide();
var buttonRowContents = $buttonRow.html();
$span = $jQ(buttonRowContents).html('');
var $replacementRow = $jQ('<div class="mktoFormRow" />').append($span.append($replacement));
$jQ('.mktoFormRow :last').after($replacementRow);
$jQ('#replacementButton').click(function(){
console.log('debug1');
if (!isEmailValid()) {
console.log('debug2');
var $error = $jQ('#Email').parent().find('.mktoError');
if ($error.length == 0) {
$error = getError('Please provide a business or institutional email address');
$jQ('#Email').after($error);
}
$error.fadeIn(200);
$jQ('#Email').removeClass('mktoInvalid').addClass('mktoInvalid');
return;
} else {
console.log('debug3');
$jQ('.mktoButtonRow button').trigger('click');
}
});
}
 
function isEmailValid() {
var email = $jQ('#Email').val().toLowerCase();
for(i=0; i < invalidDomains.length; i++) {
var invalidDomain = invalidDomains[i].toLowerCase();
if (email.indexOf(invalidDomain) !== -1) {
return false;
}
    }
return true;
}
 
function getError(message, detail) {
var $container = $jQ('<div class="mktoError" style="right: 0px; bottom: -47px; display: none" />');
var $arrow = $jQ('<div class="mktoErrorArrowWrap"><div class="mktoErrorArrow"></div></div>');
var $errorMessage = $jQ('<div class="mktoErrorMsg" />').html(message);
if (typeof detail == 'string' && $jQ.trim(detail) != '') {
$errorMessage = $errorMessage.append($jQ('<span class="mktoErrorDetail" />').html(detail))
}
return $container.append($arrow).append($errorMessage);
}
</script>
Anonymous
Not applicable
I've narrowed down my issue on "1.0" forms - we keep this code in a Snippet so that if we want to add a competitor domain to the list, or a new free/junk mail domain starts popping up, we only need to edit in one place and reapprove the pages VS manually updating 400+ pages with forms. 

Welp...for some reason, perhaps an update, Marketo is now automatically adding a "CDATA" tag to my code into the Snippet. I've tried manually deleting, pasting new code w/o CDATA, and createing a new Snippet - but the CDATA tag keeps appearing...and I learned, CDATA causing anything in the tag to be ignored. 

😞

I've reached out to support and am hoping they can either override whatever is causing the tag to be added (or perhaps figure out why it's editing user added code to begin with). Fingers crossed...I reallllllllllllllllllly don't want to go back to the "old way" and have to update every form page whenever something like sharklasers.com starts appearing on our forms (ps, that's a real junk email domain)!

Anyone here got any inside scoop on if/when we can add our own javascript to form 2.0 pages? They sure look nice, but I'll choose function over fashion every time.
Anonymous
Not applicable
I checked and the forms 1.0 on our site (conductor.com) are still validating the email address and displaying an error message if the email domain is a public domain.
Anonymous
Not applicable
The issue I had with the 1.0 Forms was due to placement as explained here: https://community.marketo.com/MarketoResource?id=kA650000000GttuCAC

I just deleted the HTML and added a new one with code pasted in. Everything is working fine again.


Anonymous
Not applicable
yep 😞 just tested Elliott's original code just to ensure i don't have any typos that cropped up over months of adding new domains to block and the form submitted with out error:

http://pages.silkroad.com/testingPURLs.html

Anonymous
Not applicable
Glad to see other's are in the same boat -- this code is no longer working on "form 1.0" pages, or form 2.0 pages. Any help or fix is appreciated 🙂
Anonymous
Not applicable
Thanks Elliott. 

Yes, the most recent landing pages are using the Forms 2.0 and I was unaware of the issue. 

Have you come accross a solution other than not using the new forms?




Anonymous
Not applicable
The email address field validation is still working on our legacy Marketo forms.  Are you using the new Forms 2.0 on your landing pages?  I understand that the javascript for this may not be compatible with Forms 2.0.
Anonymous
Not applicable
Although this has worked for me in the past, It seems to have stopped working on landing pages recently. Have any of you experienced the same?

Thanks,
Sam
Anonymous
Not applicable
Amazingly, we saw little or no traffic decline and the quality increased as measured by the %that became MQLs and  Opps.
Michelle_Tizian
Level 10
Hey Elliott, thanks for posting the info above.  So if a person enters a @gmail.com or other personal email address, and hits the submit button, the error message that gets displayed is "Please enter a business address, not one from a public service"?  Since implementing this rule, did you see a decrease in your conversion rate? An increase in better lead quality?  I want to use it on a couple of my forms to test against another form that doesn't have the email type restriction.  I have a few Google adwords and Linkedin campaigns in which I'm seeing emails that are mostly non company emails and I'm worried that they won't become actual customers :(.  


Anonymous
Not applicable
Below is the code from the article that we place in an HTML object on our landing pages that contain forms.  We've added  checks for over 80 popular public email domains including those that generate temporary email addresses.  The Two Column Forms help article explains how to move error messages in forms.

<!-- Validate the email address field in forms for a non-public domain -->
<script type="text/javascript" src="/js/public/jquery-latest.min.js" language="JavaScript"></script>
<script type="text/javascript">
// set no conflict mode for jquery
var $jQ = jQuery.noConflict();
//edit this list with the domains you want to block
var invalidDomains = ["@123mail.org","@aol.com","@att.net","@bellsouth.net","@charter.net","@comcast.net","@cox.net","@earthlink.net","@gmail.com","@gmx.com","@gmx.de","@googlemail.com","@hotmail.","@juno.com","@live.","@mac.com","@mail.com","@me.com","@mindspring.com","@msn.com","@optonline.net","@pacbell.net","@rediffmail.com","@rocketmail.com","@rogers.com",".rr.com.","@sbcglobal.net","@sympatico.ca","@telus.net","@verizon.net","@web.de","@yahoo.","@ymail.com","@zigmail.com","@bigstring.com","@bumpymail.com","@centermail.com","@centermail.net","@discardmail.com","@dodgeit.com","@e4ward.com","@emailias.com","@fakeinformation.com","@front14.org","@getairmail.com","@ghosttexter.de","@jetable.net","@kasmail.com","@link2mail.net","@mailexpire.com","@mailinator.com","@mailmetrash.com","@mailmoat.com","@messagebeamer.de","@mytrashmail.com","@nepwk.com","@nervmich.net","@netmails.net","@netzidiot.de","@nurfuerspam.de","@oneoffemail.com","@pookmail.com","@privacy.net","@punkass.com","@rmqkr.net","@sharklasers.com","@sneakemail.com","@sofort-mail.de","@sogetthis.com","@spam.la","@spambob.com","@spambob.net","@spambob.org","@spambog.com","@spamex.com","@spamgourmet.com","@spamhole.com","@spaminator.de","@spammotel.com","@spamtrail.com","@trash-mail.de","@trashymail.com","@trashmail.net","@yopmail.com","@wuzup.net"];

function formSubmit(elt) {
// run the custom validation. If it succeeds, run the Marketo validation
if (!isEmailGood()) {
Mkto.setError($jQ("#Email ~ span").prev()[0],"Please enter a business address, not one from a public service");
return false;
} else {
Mkto.clearError($jQ("#Email ~ span").prev()[0]);
}
return Mkto.formSubmit(elt);
}

function isEmailGood() {
for(i=0; i < invalidDomains.length; i++) {
if ( $jQ("#Email[value*=" + invalidDomains[i] + "]").length > 0) {
return false;
}
}
return true;
}
</script>
Josh_Hill13
Level 10 - Champion Alumni
Try this article. Definitely can be done.
https://community.marketo.com/MarketoArticle?id=kA050000000Kyxo

or do a search on blocking personal email javascript.