Show error when role-based email is used
[MAILPOET-2101]
This commit is contained in:
@@ -126,7 +126,7 @@ jQuery(document).ready(() => {
|
|||||||
jQuery('#subscribers_data_import_results:visible').hide();
|
jQuery('#subscribers_data_import_results:visible').hide();
|
||||||
|
|
||||||
// show parse statistics if any duplicate/invalid records were found
|
// show parse statistics if any duplicate/invalid records were found
|
||||||
if (subscribers.invalid.length || subscribers.duplicate.length) {
|
if (subscribers.invalid.length || subscribers.duplicate.length || subscribers.role.length) {
|
||||||
// count repeating e-mails inside duplicate array and present them in
|
// count repeating e-mails inside duplicate array and present them in
|
||||||
// 'email (xN)' format
|
// 'email (xN)' format
|
||||||
duplicates = {};
|
duplicates = {};
|
||||||
@@ -145,7 +145,7 @@ jQuery(document).ready(() => {
|
|||||||
importResults = {
|
importResults = {
|
||||||
notice: MailPoet.I18n.t('importNoticeSkipped').replace(
|
notice: MailPoet.I18n.t('importNoticeSkipped').replace(
|
||||||
'%1$s',
|
'%1$s',
|
||||||
`<strong>${subscribers.invalid.length + subscribers.duplicate.length}</strong>`
|
`<strong>${subscribers.invalid.length + subscribers.duplicate.length + subscribers.role.length}</strong>`
|
||||||
),
|
),
|
||||||
invalid: (subscribers.invalid.length)
|
invalid: (subscribers.invalid.length)
|
||||||
? MailPoet.I18n.t('importNoticeInvalid')
|
? MailPoet.I18n.t('importNoticeInvalid')
|
||||||
@@ -157,6 +157,11 @@ jQuery(document).ready(() => {
|
|||||||
.replace('%1$s', `<strong>${subscribers.duplicate.length}</strong>`)
|
.replace('%1$s', `<strong>${subscribers.duplicate.length}</strong>`)
|
||||||
.replace('%2$s', subscribers.duplicate.join(', '))
|
.replace('%2$s', subscribers.duplicate.join(', '))
|
||||||
: null,
|
: null,
|
||||||
|
role: (subscribers.role.length)
|
||||||
|
? MailPoet.I18n.t('importNoticeRoleBased')
|
||||||
|
.replace('%1$s', `<strong>${subscribers.role.length.toLocaleString()}</strong>`)
|
||||||
|
.replace('%2$s', subscribers.role.join(', '))
|
||||||
|
: null,
|
||||||
};
|
};
|
||||||
jQuery('#subscribers_data_parse_results').html(
|
jQuery('#subscribers_data_parse_results').html(
|
||||||
subscribersDataParseResultsTemplate(importResults)
|
subscribersDataParseResultsTemplate(importResults)
|
||||||
|
@@ -3,6 +3,42 @@
|
|||||||
import jQuery from 'jquery';
|
import jQuery from 'jquery';
|
||||||
import _ from 'underscore';
|
import _ from 'underscore';
|
||||||
|
|
||||||
|
const ROLE_EMAILS = [
|
||||||
|
'abuse',
|
||||||
|
'compliance',
|
||||||
|
'devnull',
|
||||||
|
'dns',
|
||||||
|
'ftp',
|
||||||
|
'hostmaster',
|
||||||
|
'inoc',
|
||||||
|
'ispfeedback',
|
||||||
|
'ispsupport',
|
||||||
|
'list-request',
|
||||||
|
'list',
|
||||||
|
'maildaemon',
|
||||||
|
'noc',
|
||||||
|
'no-reply',
|
||||||
|
'noreply',
|
||||||
|
'null',
|
||||||
|
'phish',
|
||||||
|
'phishing',
|
||||||
|
'postmaster',
|
||||||
|
'privacy',
|
||||||
|
'registrar',
|
||||||
|
'root',
|
||||||
|
'security',
|
||||||
|
'spam',
|
||||||
|
'sysadmin',
|
||||||
|
'undisclosed-recipients',
|
||||||
|
'unsubscribe',
|
||||||
|
'usenet',
|
||||||
|
'uucp',
|
||||||
|
'webmaster',
|
||||||
|
'www',
|
||||||
|
];
|
||||||
|
|
||||||
|
const isRoleEmail = email => ROLE_EMAILS.findIndex(element => email.startsWith(element)) >= 0;
|
||||||
|
|
||||||
const detectAndCleanupEmail = (emailString) => {
|
const detectAndCleanupEmail = (emailString) => {
|
||||||
let test;
|
let test;
|
||||||
// decode HTML entities
|
// decode HTML entities
|
||||||
@@ -31,6 +67,9 @@ const detectAndCleanupEmail = (emailString) => {
|
|||||||
if (!window.mailpoet_email_regex.test(email)) {
|
if (!window.mailpoet_email_regex.test(email)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (isRoleEmail(email)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return email;
|
return email;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -39,6 +78,7 @@ function sanitizeCSVData(csvData) {
|
|||||||
const parsedEmails = [];
|
const parsedEmails = [];
|
||||||
const duplicateEmails = [];
|
const duplicateEmails = [];
|
||||||
const invalidEmails = [];
|
const invalidEmails = [];
|
||||||
|
const roleEmails = [];
|
||||||
let emailColumnPosition = null;
|
let emailColumnPosition = null;
|
||||||
let columnCount = null;
|
let columnCount = null;
|
||||||
let isHeaderFound = false;
|
let isHeaderFound = false;
|
||||||
@@ -82,6 +122,8 @@ function sanitizeCSVData(csvData) {
|
|||||||
email = detectAndCleanupEmail(rowData[emailColumnPosition]);
|
email = detectAndCleanupEmail(rowData[emailColumnPosition]);
|
||||||
if (_.has(parsedEmails, email)) {
|
if (_.has(parsedEmails, email)) {
|
||||||
duplicateEmails.push(email);
|
duplicateEmails.push(email);
|
||||||
|
} else if (isRoleEmail(rowData[emailColumnPosition])) {
|
||||||
|
roleEmails.push(rowData[emailColumnPosition]);
|
||||||
} else if (!window.mailpoet_email_regex.test(email)) {
|
} else if (!window.mailpoet_email_regex.test(email)) {
|
||||||
invalidEmails.push(rowData[emailColumnPosition]);
|
invalidEmails.push(rowData[emailColumnPosition]);
|
||||||
} else {
|
} else {
|
||||||
@@ -116,6 +158,7 @@ function sanitizeCSVData(csvData) {
|
|||||||
subscribersCount: processedSubscribers.length,
|
subscribersCount: processedSubscribers.length,
|
||||||
duplicate: duplicateEmails,
|
duplicate: duplicateEmails,
|
||||||
invalid: invalidEmails,
|
invalid: invalidEmails,
|
||||||
|
role: roleEmails,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@@ -44,6 +44,7 @@
|
|||||||
'noValidRecords': __('No valid records were found. This file needs to be formatted in a CSV style (comma-separated). Look at some [link]examples on our support site.[/link]'),
|
'noValidRecords': __('No valid records were found. This file needs to be formatted in a CSV style (comma-separated). Look at some [link]examples on our support site.[/link]'),
|
||||||
'importNoticeSkipped': __('%1$s records had issues and were skipped.'),
|
'importNoticeSkipped': __('%1$s records had issues and were skipped.'),
|
||||||
'importNoticeInvalid': __('%1$s emails are not valid: %2$s'),
|
'importNoticeInvalid': __('%1$s emails are not valid: %2$s'),
|
||||||
|
'importNoticeRoleBased': _x('%1$s role-based addresses are not permitted: %2$s', 'Error message when importing addresses like postmaster@domain.com'),
|
||||||
'importNoticeDuplicate': __('%1$s emails appear more than once in your file: %2$s'),
|
'importNoticeDuplicate': __('%1$s emails appear more than once in your file: %2$s'),
|
||||||
'hideDetails': __('Hide details'),
|
'hideDetails': __('Hide details'),
|
||||||
'showDetails': __('Show more details'),
|
'showDetails': __('Show more details'),
|
||||||
|
@@ -14,6 +14,9 @@
|
|||||||
{{#if invalid}}
|
{{#if invalid}}
|
||||||
<p>{{{invalid}}}</p>
|
<p>{{{invalid}}}</p>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{#if role}}
|
||||||
|
<p>{{{role}}}</p>
|
||||||
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</script>
|
</script>
|
||||||
|
Reference in New Issue
Block a user