From 2cc1e28eca6079d9b02c11653099ec9d3b2990b2 Mon Sep 17 00:00:00 2001 From: Sag Date: Wed, 15 Jan 2025 10:56:47 +0700 Subject: [PATCH] Cleaned up newEmailAddresses feature flag (#22001) ref https://linear.app/ghost/issue/ENG-1416 - "New email addresses" feature was released in [Ghost v5.78.0](https://github.com/TryGhost/Ghost/releases/tag/v5.78.0) (commit: https://github.com/TryGhost/Ghost/commit/7d0be3f1a920c70cd48c76c765d8c67286698b6d) - In the context of DMARC changes from February 2024, we've allowed self-hosters to change their sender and reply-to email addresses without verification (cf. [Investigation For Self-hosters](https://www.notion.so/ghost/Investigation-on-FROM-addresses-3f07d724e6044179b38e2793e1d9e797) and [DMARC Product Changes](https://www.notion.so/ghost/Working-Document-DMARC-Product-Changes-4cf1e435d8f2452f83cd92dddeaf9d67?pvs=4)) --- .../newsletters/NewsletterDetailModal.tsx | 32 +-- .../newsletters/NewsletterPreviewContent.tsx | 4 +- .../src/utils/newsletterEmails.ts | 2 +- .../core/server/services/mail/GhostMailer.js | 52 +--- .../core/server/services/members/service.js | 9 +- .../newsletters/NewslettersService.js | 32 +-- .../settings-helpers/SettingsHelpers.js | 26 +- .../services/settings/SettingsBREADService.js | 15 +- ghost/core/core/shared/labs.js | 1 - .../admin/__snapshots__/config.test.js.snap | 1 - .../__snapshots__/newsletters.test.js.snap | 62 ++++- .../admin/__snapshots__/settings.test.js.snap | 2 +- ghost/core/test/e2e-api/admin/members.test.js | 13 +- .../test/e2e-api/admin/newsletters.test.js | 252 +----------------- .../core/test/e2e-api/admin/settings.test.js | 34 --- .../services/q-email-addresses.test.js | 75 +----- .../services/newsletters/service.test.js | 61 ----- .../settings/settings-bread-service.test.js | 6 +- .../src/EmailAddressService.ts | 6 +- ghost/staff-service/lib/StaffServiceEmails.js | 5 +- .../staff-service/test/staff-service.test.js | 12 +- 21 files changed, 118 insertions(+), 584 deletions(-) diff --git a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx index 59a7c217c3..7d8603fef5 100644 --- a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx +++ b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx @@ -1,6 +1,6 @@ import NewsletterPreview from './NewsletterPreview'; import NiceModal from '@ebay/nice-modal-react'; -import React, {useCallback, useEffect, useMemo, useState} from 'react'; +import React, {useCallback, useEffect, useState} from 'react'; import useFeatureFlag from '../../../../hooks/useFeatureFlag'; import useSettingGroup from '../../../../hooks/useSettingGroup'; import validator from 'validator'; @@ -25,46 +25,18 @@ const ReplyToEmailField: React.FC<{ }> = ({newsletter, updateNewsletter, errors, clearError}) => { const {settings, config} = useGlobalData(); const [defaultEmailAddress, supportEmailAddress] = getSettingValues(settings, ['default_email_address', 'support_email_address']); - const newEmailAddressesFlag = useFeatureFlag('newEmailAddresses'); // When editing the senderReplyTo, we use a state, so we don't cause jumps when the 'rendering' method decides to change the value // Because 'newsletter' 'support' or an empty value can be mapped to a default value, we don't want those changes to happen when entering text const [senderReplyTo, setSenderReplyTo] = useState(renderReplyToEmail(newsletter, config, supportEmailAddress, defaultEmailAddress) || ''); let newsletterAddress = renderSenderEmail(newsletter, config, defaultEmailAddress); - const replyToEmails = useMemo(() => [ - {label: `Newsletter address (${newsletterAddress})`, value: 'newsletter'}, - {label: `Support address (${supportEmailAddress})`, value: 'support'} - ], [newsletterAddress, supportEmailAddress]); - - useEffect(() => { - if (!isManagedEmail(config) && !newEmailAddressesFlag) { - // Autocorrect invalid values - const foundValue = replyToEmails.find(option => option.value === newsletter.sender_reply_to); - if (!foundValue) { - updateNewsletter({sender_reply_to: 'newsletter'}); - } - } - }, [config, replyToEmails, updateNewsletter, newsletter.sender_reply_to, newEmailAddressesFlag]); const onChange = useCallback((e: React.ChangeEvent) => { setSenderReplyTo(e.target.value); updateNewsletter({sender_reply_to: e.target.value || 'newsletter'}); }, [updateNewsletter, setSenderReplyTo]); - // Self-hosters, or legacy Pro users - if (!isManagedEmail(config) && !newEmailAddressesFlag) { - // Only allow some choices - return ( -