From 0022a7eb64b283a35c4960e10759c5604500e4dc Mon Sep 17 00:00:00 2001 From: fsadmin Date: Thu, 19 Mar 2026 21:18:51 +0100 Subject: [PATCH] added CC and BCC fields to send configurations --- client/src/send-configurations/CUD.js | 8 +++++++- locales/en-US/common.json | 4 ++++ server/lib/message-sender.js | 8 ++++++++ server/models/send-configurations.js | 4 ++-- ...60319000000_add_cc_bcc_to_send_configurations.js | 13 +++++++++++++ 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 server/setup/knex/migrations/20260319000000_add_cc_bcc_to_send_configurations.js diff --git a/client/src/send-configurations/CUD.js b/client/src/send-configurations/CUD.js index 4d972a284..e180d9e5a 100644 --- a/client/src/send-configurations/CUD.js +++ b/client/src/send-configurations/CUD.js @@ -76,6 +76,8 @@ export default class CUD extends Component { data.verpEnabled = !!data.verp_hostname; data.verp_hostname = data.verp_hostname || ''; data.verp_disable_sender_header = data.verpEnabled ? !!data.verp_disable_sender_header : false; + data.cc = data.cc || ''; + data.bcc = data.bcc || ''; } submitFormValuesMutator(data) { @@ -86,7 +88,7 @@ export default class CUD extends Component { } return filterData(data, ['name', 'description', 'from_email', 'from_email_overridable', 'from_name', - 'from_name_overridable', 'reply_to', 'reply_to_overridable', 'x_mailer', + 'from_name_overridable', 'reply_to', 'reply_to_overridable', 'cc', 'bcc', 'x_mailer', 'verp_hostname', 'verp_disable_sender_header', 'mailer_type', 'mailer_settings', 'namespace']); } @@ -104,6 +106,8 @@ export default class CUD extends Component { from_name_overridable: false, reply_to: '', reply_to_overridable: false, + cc: '', + bcc: '', verpEnabled: false, verp_hostname: '', verp_disable_sender_header: false, @@ -232,6 +236,8 @@ export default class CUD extends Component { + + diff --git a/locales/en-US/common.json b/locales/en-US/common.json index b9eb3b757..a0a0f78b6 100644 --- a/locales/en-US/common.json +++ b/locales/en-US/common.json @@ -890,6 +890,10 @@ "overridable": "Overridable", "defaultFromName": "Default \"from\" name", "defaultReplytoEmail": "Default \"reply-to\" email", + "cc": "CC", + "bcc": "BCC", + "commaSeperatedListOfCcAddresses": "Comma-separated list of CC email addresses that will receive a copy of every outgoing email", + "commaSeperatedListOfBccAddresses": "Comma-separated list of BCC email addresses that will receive a blind copy of every outgoing email", "xMailer": "X-Mailer", "verpBounceHandling": "VERP Bounce Handling", "verpStatus": "VERP status", diff --git a/server/lib/message-sender.js b/server/lib/message-sender.js index 5f0d41a92..6b90e85bb 100644 --- a/server/lib/message-sender.js +++ b/server/lib/message-sender.js @@ -452,6 +452,14 @@ class MessageSender { encryptionKeys }; + if (sendConfiguration.cc) { + mail.cc = sendConfiguration.cc; + } + + if (sendConfiguration.bcc) { + mail.bcc = sendConfiguration.bcc; + } + let response; let responseId = null; diff --git a/server/models/send-configurations.js b/server/models/send-configurations.js index 890c0d387..75b80b89f 100644 --- a/server/models/send-configurations.js +++ b/server/models/send-configurations.js @@ -14,7 +14,7 @@ const mailers = require('../lib/mailers'); const senders = require('../lib/senders'); const dependencyHelpers = require('../lib/dependency-helpers'); -const allowedKeys = new Set(['name', 'description', 'from_email', 'from_email_overridable', 'from_name', 'from_name_overridable', 'reply_to', 'reply_to_overridable', 'x_mailer', 'verp_hostname', 'verp_disable_sender_header', 'mailer_type', 'mailer_settings', 'namespace']); +const allowedKeys = new Set(['name', 'description', 'from_email', 'from_email_overridable', 'from_name', 'from_name_overridable', 'reply_to', 'reply_to_overridable', 'cc', 'bcc', 'x_mailer', 'verp_hostname', 'verp_disable_sender_header', 'mailer_type', 'mailer_settings', 'namespace']); const allowedMailerTypes = new Set(Object.values(MailerType)); @@ -75,7 +75,7 @@ async function _getByTx(tx, context, key, id, withPermissions, withPrivateData) entity.mailer_settings = JSON.parse(entity.mailer_settings); } else { entity = await tx('send_configurations').where(key, id).select( - ['id', 'name', 'cid', 'description', 'from_email', 'from_email_overridable', 'from_name', 'from_name_overridable', 'reply_to', 'reply_to_overridable'] + ['id', 'name', 'cid', 'description', 'from_email', 'from_email_overridable', 'from_name', 'from_name_overridable', 'reply_to', 'reply_to_overridable', 'cc', 'bcc'] ).first(); if (!entity) { diff --git a/server/setup/knex/migrations/20260319000000_add_cc_bcc_to_send_configurations.js b/server/setup/knex/migrations/20260319000000_add_cc_bcc_to_send_configurations.js new file mode 100644 index 000000000..329679339 --- /dev/null +++ b/server/setup/knex/migrations/20260319000000_add_cc_bcc_to_send_configurations.js @@ -0,0 +1,13 @@ +exports.up = (knex, Promise) => (async() => { + await knex.schema.table('send_configurations', table => { + table.string('cc').nullable().defaultTo(null); + table.string('bcc').nullable().defaultTo(null); + }); +})(); + +exports.down = (knex, Promise) => (async() => { + await knex.schema.table('send_configurations', table => { + table.dropColumn('cc'); + table.dropColumn('bcc'); + }); +})();