diff --git a/packages/rocketchat-apps/client/admin/appManage.html b/packages/rocketchat-apps/client/admin/appManage.html
index c4cd79c91e4..0b08aff6667 100644
--- a/packages/rocketchat-apps/client/admin/appManage.html
+++ b/packages/rocketchat-apps/client/admin/appManage.html
@@ -74,7 +74,11 @@
diff --git a/packages/rocketchat-apps/client/admin/appManage.js b/packages/rocketchat-apps/client/admin/appManage.js
index f47ec13b217..986cd135d9c 100644
--- a/packages/rocketchat-apps/client/admin/appManage.js
+++ b/packages/rocketchat-apps/client/admin/appManage.js
@@ -4,6 +4,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router';
import { Template } from 'meteor/templating';
import { TAPi18n } from 'meteor/tap:i18n';
import { TAPi18next } from 'meteor/tap:i18n';
+import { isEmail } from 'meteor/rocketchat:utils';
import _ from 'underscore';
import s from 'underscore.string';
import toastr from 'toastr';
@@ -127,6 +128,7 @@ Template.apps.onDestroyed(function() {
});
Template.appManage.helpers({
+ isEmail,
_(key, ...args) {
const options = (args.pop()).hash;
if (!_.isEmpty(args)) {
diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js
index 83ae7802056..a21bc68db68 100644
--- a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js
+++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js
@@ -6,35 +6,11 @@ import { Template } from 'meteor/templating';
import { AutoComplete } from 'meteor/mizzao:autocomplete';
import { RocketChat, handleError } from 'meteor/rocketchat:lib';
import { ChatRoom } from 'meteor/rocketchat:ui';
-import { t } from 'meteor/rocketchat:utils';
+import { t, isEmail } from 'meteor/rocketchat:utils';
import { Deps } from 'meteor/deps';
import toastr from 'toastr';
import resetSelection from '../resetSelection';
-/*
- * Code from https://github.com/dleitee/valid.js
- * Checks for email
- * @params email
- * @return boolean
- */
-const isEmail = (email) => {
- const sQtext = '[^\\x0d\\x22\\x5c]';
- const sDtext = '[^\\x0d\\x5b-\\x5d]';
- const sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d]+';
- const sQuotedPair = '\\x5c[\\x00-\\x7f]';
- const sDomainLiteral = `\\x5b(${ sDtext }|${ sQuotedPair })*\\x5d`;
- const sQuotedString = `\\x22(${ sQtext }|${ sQuotedPair })*\\x22`;
- const sDomainRef = sAtom;
- const sSubDomain = `(${ sDomainRef }|${ sDomainLiteral })`;
- const sWord = `(${ sAtom }|${ sQuotedString })`;
- const sDomain = `${ sSubDomain }(\\x2e${ sSubDomain })*`;
- const sLocalPart = `${ sWord }(\\x2e${ sWord })*`;
- const sAddrSpec = `${ sLocalPart }\\x40${ sDomain }`;
- const sValidEmail = `^${ sAddrSpec }$`;
- const reg = new RegExp(sValidEmail);
- return reg.test(email);
-};
-
const filterNames = (old) => {
const reg = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
return [...old.replace(' ', '').toLocaleLowerCase()].filter((f) => reg.test(f)).join('');
diff --git a/packages/rocketchat-utils/client/index.js b/packages/rocketchat-utils/client/index.js
index a18cac241a9..46e4fcde870 100644
--- a/packages/rocketchat-utils/client/index.js
+++ b/packages/rocketchat-utils/client/index.js
@@ -2,6 +2,7 @@ import { t, isRtl } from '../lib/tapi18n';
import { isChrome, isFirefox } from './lib/browsers';
import { getDefaultSubscriptionPref } from '../lib/getDefaultSubscriptionPref';
import { Info } from '../rocketchat.info';
+import { isEmail } from '../lib/isEmail';
import { handleError } from './lib/handleError';
import { getUserPreference } from '../lib/getUserPreference';
import { fileUploadMediaWhiteList, fileUploadIsValidContentType } from '../lib/fileUploadRestrictions';
@@ -19,6 +20,7 @@ export {
isFirefox,
getDefaultSubscriptionPref,
Info,
+ isEmail,
handleError,
getUserPreference,
fileUploadIsValidContentType,
diff --git a/packages/rocketchat-utils/lib/isEmail.js b/packages/rocketchat-utils/lib/isEmail.js
new file mode 100644
index 00000000000..1927b879a89
--- /dev/null
+++ b/packages/rocketchat-utils/lib/isEmail.js
@@ -0,0 +1,23 @@
+/*
+ * Code from https://github.com/dleitee/valid.js
+ * Checks for email
+ * @params email
+ * @return boolean
+ */
+export const isEmail = (email) => {
+ const sQtext = '[^\\x0d\\x22\\x5c]';
+ const sDtext = '[^\\x0d\\x5b-\\x5d]';
+ const sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d]+';
+ const sQuotedPair = '\\x5c[\\x00-\\x7f]';
+ const sDomainLiteral = `\\x5b(${ sDtext }|${ sQuotedPair })*\\x5d`;
+ const sQuotedString = `\\x22(${ sQtext }|${ sQuotedPair })*\\x22`;
+ const sDomainRef = sAtom;
+ const sSubDomain = `(${ sDomainRef }|${ sDomainLiteral })`;
+ const sWord = `(${ sAtom }|${ sQuotedString })`;
+ const sDomain = `${ sSubDomain }(\\x2e${ sSubDomain })*`;
+ const sLocalPart = `${ sWord }(\\x2e${ sWord })*`;
+ const sAddrSpec = `${ sLocalPart }\\x40${ sDomain }`;
+ const sValidEmail = `^${ sAddrSpec }$`;
+ const reg = new RegExp(sValidEmail);
+ return reg.test(email);
+};