diff --git a/assets/css/src/common.styl b/assets/css/src/common.styl index 622e6906ce..f590e94ff0 100644 --- a/assets/css/src/common.styl +++ b/assets/css/src/common.styl @@ -71,3 +71,14 @@ progress::-webkit-progress-value progress::-moz-progress-bar background-color: progress-foreground border-radius: progress-border-radius + +/* double class is intentional here, we need to be very specific here to + something wrapping our warning message could override its style */ +p.sender_email_address_warning.sender_email_address_warning, + p.sender_email_address_warning.sender_email_address_warning a + color: #990000 + text-align: left + align-self: flex-start; + +p.sender_email_address_warning:first-child + margin-top: 1em diff --git a/assets/css/src/welcome_wizard.styl b/assets/css/src/welcome_wizard.styl index b86bfd9a7f..466b3e8b9b 100644 --- a/assets/css/src/welcome_wizard.styl +++ b/assets/css/src/welcome_wizard.styl @@ -43,7 +43,7 @@ height: 30px input[type="submit"] margin: 50px 0 25px 0 - a + a.sender_form_small font-size: 12px color: #595c65 diff --git a/assets/js/src/common/sender_email_address_warning.jsx b/assets/js/src/common/sender_email_address_warning.jsx new file mode 100644 index 0000000000..73d55f873a --- /dev/null +++ b/assets/js/src/common/sender_email_address_warning.jsx @@ -0,0 +1,89 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import MailPoet from 'mailpoet'; +import ReactStringReplace from 'react-string-replace'; + +/* https://github.com/mailcheck/mailcheck/wiki/List-of-Popular-Domains */ +const badDomains = [ + /* Default domains included */ + 'aol.com', 'att.net', 'comcast.net', 'facebook.com', 'gmail.com', 'gmx.com', 'googlemail.com', + 'google.com', 'hotmail.com', 'hotmail.co.uk', 'mac.com', 'me.com', 'mail.com', 'msn.com', + 'live.com', 'sbcglobal.net', 'verizon.net', 'yahoo.com', 'yahoo.co.uk', + + /* Other global domains */ + 'email.com', 'fastmail.fm', 'games.com' /* AOL */, 'gmx.net', 'hush.com', 'hushmail.com', 'icloud.com', + 'iname.com', 'inbox.com', 'lavabit.com', 'love.com' /* AOL */, 'outlook.com', 'pobox.com', 'protonmail.com', + 'rocketmail.com' /* Yahoo */, 'safe-mail.net', 'wow.com' /* AOL */, 'ygm.com' /* AOL */, + 'ymail.com' /* Yahoo */, 'zoho.com', 'yandex.com', + + /* United States ISP domains */ + 'bellsouth.net', 'charter.net', 'cox.net', 'earthlink.net', 'juno.com', + + /* British ISP domains */ + 'btinternet.com', 'virginmedia.com', 'blueyonder.co.uk', 'freeserve.co.uk', 'live.co.uk', + 'ntlworld.com', 'o2.co.uk', 'orange.net', 'sky.com', 'talktalk.co.uk', 'tiscali.co.uk', + 'virgin.net', 'wanadoo.co.uk', 'bt.com', + + /* Domains used in Asia */ + 'sina.com', 'sina.cn', 'qq.com', 'naver.com', 'hanmail.net', 'daum.net', 'nate.com', 'yahoo.co.jp', 'yahoo.co.kr', 'yahoo.co.id', 'yahoo.co.in', 'yahoo.com.sg', 'yahoo.com.ph', '163.com', '126.com', 'aliyun.com', 'foxmail.com', + + /* French ISP domains */ + 'hotmail.fr', 'live.fr', 'laposte.net', 'yahoo.fr', 'wanadoo.fr', 'orange.fr', 'gmx.fr', 'sfr.fr', 'neuf.fr', 'free.fr', + + /* German ISP domains */ + 'gmx.de', 'hotmail.de', 'live.de', 'online.de', 't-online.de' /* T-Mobile */, 'web.de', 'yahoo.de', + + /* Italian ISP domains */ + 'libero.it', 'virgilio.it', 'hotmail.it', 'aol.it', 'tiscali.it', 'alice.it', 'live.it', 'yahoo.it', 'email.it', 'tin.it', 'poste.it', 'teletu.it', + + /* Russian ISP domains */ + 'mail.ru', 'rambler.ru', 'yandex.ru', 'ya.ru', 'list.ru', + + /* Belgian ISP domains */ + 'hotmail.be', 'live.be', 'skynet.be', 'voo.be', 'tvcablenet.be', 'telenet.be', + + /* Argentinian ISP domains */ + 'hotmail.com.ar', 'live.com.ar', 'yahoo.com.ar', 'fibertel.com.ar', 'speedy.com.ar', 'arnet.com.ar', + + /* Domains used in Mexico */ + 'yahoo.com.mx', 'live.com.mx', 'hotmail.es', 'hotmail.com.mx', 'prodigy.net.mx', + + /* Domains used in Brazil */ + 'yahoo.com.br', 'hotmail.com.br', 'outlook.com.br', 'uol.com.br', 'bol.com.br', 'terra.com.br', 'ig.com.br', 'itelefonica.com.br', 'r7.com', 'zipmail.com.br', 'globo.com', 'globomail.com', 'oi.com.br' +]; + +const SenderEmailAddressWarning = ({ emailAddress }) => { + const domain = emailAddress.split('@').pop().toLowerCase(); + if (badDomains.indexOf(domain) > -1) { + return ( +

{MailPoet.I18n.t('senderEmailAddressWarning1')}

+

+ {ReactStringReplace( + MailPoet.I18n.t('senderEmailAddressWarning2'), + /(%userDomain|%originalSender|.*<\/em>)/, + (match) => { + if (match === '%userDomain') return 'user domain'; // TODO replace with the real domain + if (match === '%originalSender') return { emailAddress }; + return {match.replace(/<\/?em>/g, '')}; + } + )} +

+

+ + {MailPoet.I18n.t('senderEmailAddressWarning3')} + +

+
); + } + return null; +}; + +SenderEmailAddressWarning.propTypes = { + emailAddress: PropTypes.string.isRequired, +}; + +export default SenderEmailAddressWarning; diff --git a/assets/js/src/welcome_wizard/steps/sender_step.jsx b/assets/js/src/welcome_wizard/steps/sender_step.jsx index 0e014674b4..994fe3dc6e 100644 --- a/assets/js/src/welcome_wizard/steps/sender_step.jsx +++ b/assets/js/src/welcome_wizard/steps/sender_step.jsx @@ -3,6 +3,8 @@ import React from 'react'; import MailPoet from 'mailpoet'; import jQuery from 'jquery'; +import SenderEmailAddressWarning from 'common/sender_email_address_warning.jsx' + const WelcomeWizardSenderStep = props => (

{MailPoet.I18n.t('welcomeWizardLetsStartTitle')}

@@ -41,8 +43,9 @@ const WelcomeWizardSenderStep = props => ( onChange={e => props.update_sender({ address: e.target.value })} /> + - {MailPoet.I18n.t('noThanksSkip')} + {MailPoet.I18n.t('noThanksSkip')}
); diff --git a/views/layout.html b/views/layout.html index 22c287f16d..8d5a108aef 100644 --- a/views/layout.html +++ b/views/layout.html @@ -66,6 +66,9 @@ jQuery('.toplevel_page_mailpoet-newsletters.menu-top-last') <%= localize({ 'ajaxFailedErrorMessage': __('An error has happened while performing a request, the server has responded with response code %d'), + 'senderEmailAddressWarning1': _x('You might not reach the inbox of your subscribers if you use this email address.', 'In the last step, before sending a newsletter. URL: ?page=mailpoet-newsletters#/send/2'), + 'senderEmailAddressWarning2': _x('Use an address like info@%userDomain for the Sender and put %originalSender in the the Reply-to field below.', 'In the last step, before sending a newsletter. URL: ?page=mailpoet-newsletters#/send/2'), + 'senderEmailAddressWarning3': _x('Read more.'), }) %> <% block translations %><% endblock %>