diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index d8b0eab8c02..a99cdbea357 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -438,6 +438,7 @@ "error-invalid-description": "Invalid description", "error-invalid-domain": "Invalid domain", "error-invalid-email": "Invalid email __email__", + "error-invalid-email-address": "Invalid email address", "error-invalid-file-height": "Invalid file height", "error-invalid-file-type": "Invalid file type", "error-direct-message-file-upload-not-allowed": "File sharing not allowed in direct messages", @@ -1440,6 +1441,7 @@ "UTF8_Names_Slugify": "UTF8 Names Slugify", "UTF8_Names_Validation": "UTF8 Names Validation", "UTF8_Names_Validation_Description": "RegExp that will be used to validate usernames and channel names", + "Validate_email_address": "Validate email address", "Verification_email_sent": "Verification email sent", "Verified": "Verified", "Version": "Version", diff --git a/packages/rocketchat-i18n/i18n/pt.i18n.json b/packages/rocketchat-i18n/i18n/pt.i18n.json index 697693242b1..1139213e5c1 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -410,6 +410,7 @@ "error-invalid-description": "Descrição inválida", "error-invalid-domain": "Domínio inválido", "error-invalid-email": "__email__ não é um e-mail válido", + "error-invalid-email-address": "Endereço de e-mail inválido", "error-invalid-file-height": "Altura de arquivo inválida", "error-invalid-file-type": "Tipo de arquivo inválido", "error-invalid-file-width": "Altura de arquivo inválida", @@ -1235,6 +1236,7 @@ "UTF8_Names_Slugify": "Slugify Nomes UTF8 ", "UTF8_Names_Validation": "Validação de Nomes UTF8", "UTF8_Names_Validation_Description": "Não permitir caracteres especiais e espaços. Você pode usar - _ e. mas não no final do nome", + "Validate_email_address": "Validar endereço de e-mail", "Verification_email_sent": "E-mail de verificação enviado", "Verified": "Verificado", "Version": "Versão", @@ -1308,4 +1310,4 @@ "your_message_optional": "sua mensagem (opcional)", "Your_password_is_wrong": "Sua senha está errada!", "Your_push_was_sent_to_s_devices": "Sua natificação foi enviada para %s dispositivos" -} \ No newline at end of file +} diff --git a/packages/rocketchat-livechat/config.js b/packages/rocketchat-livechat/config.js index ebe0d3ccf9f..afefc188725 100644 --- a/packages/rocketchat-livechat/config.js +++ b/packages/rocketchat-livechat/config.js @@ -14,6 +14,14 @@ Meteor.startup(function() { i18nLabel: 'Display_offline_form' }); + RocketChat.settings.add('Livechat_validate_offline_email', true, { + type: 'boolean', + group: 'Livechat', + public: true, + section: 'Offline', + i18nLabel: 'Validate_email_address' + }); + RocketChat.settings.add('Livechat_offline_form_unavailable', '', { type: 'string', group: 'Livechat', diff --git a/packages/rocketchat-livechat/server/methods/sendOfflineMessage.js b/packages/rocketchat-livechat/server/methods/sendOfflineMessage.js index bba6563f146..9dedcaec19a 100644 --- a/packages/rocketchat-livechat/server/methods/sendOfflineMessage.js +++ b/packages/rocketchat-livechat/server/methods/sendOfflineMessage.js @@ -1,4 +1,6 @@ /* globals DDPRateLimiter */ +const dns = Npm.require('dns'); + Meteor.methods({ 'livechat:sendOfflineMessage'(data) { check(data, { @@ -7,6 +9,10 @@ Meteor.methods({ message: String }); + if (!RocketChat.settings.get('Livechat_display_offline_form')) { + return false; + } + const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || ''); const footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || ''); @@ -26,6 +32,16 @@ Meteor.methods({ fromEmail = RocketChat.settings.get('From_Email'); } + if (RocketChat.settings.get('Livechat_validate_offline_email')) { + const emailDomain = data.email.substr(data.email.lastIndexOf('@') + 1); + + try { + Meteor.wrapAsync(dns.resolveMx)(emailDomain); + } catch (e) { + throw new Meteor.Error('error-invalid-email-address', 'Invalid email address', { method: 'livechat:sendOfflineMessage' }); + } + } + Meteor.defer(() => { Email.send({ to: RocketChat.settings.get('Livechat_offline_email'),