diff --git a/code/web/interface/themes/responsive/DataObjectUtil/property.tpl b/code/web/interface/themes/responsive/DataObjectUtil/property.tpl
index 9ff3938f71..7fd26bc4a4 100644
--- a/code/web/interface/themes/responsive/DataObjectUtil/property.tpl
+++ b/code/web/interface/themes/responsive/DataObjectUtil/property.tpl
@@ -569,6 +569,8 @@
{/if}
{/foreach}
+ {elseif $property.type == 'sortableList'}
+ {include file="DataObjectUtil/sortableList.tpl"}
{/if}
diff --git a/code/web/interface/themes/responsive/DataObjectUtil/sortableList.tpl b/code/web/interface/themes/responsive/DataObjectUtil/sortableList.tpl
new file mode 100644
index 0000000000..5a9d50fd92
--- /dev/null
+++ b/code/web/interface/themes/responsive/DataObjectUtil/sortableList.tpl
@@ -0,0 +1,111 @@
+{strip}
+
+ {foreach from=$property.values item=propertyName key=propertyValue}
+ - {$propertyName|escape}
+ {/foreach}
+
+
+
+
\ No newline at end of file
diff --git a/code/web/release_notes/24.07.00.MD b/code/web/release_notes/24.07.00.MD
index d68f76c8be..83926fbc8a 100644
--- a/code/web/release_notes/24.07.00.MD
+++ b/code/web/release_notes/24.07.00.MD
@@ -18,6 +18,7 @@
// pedro
- Added a new feature: SMTP setting. This allows for SMTP configuration to be utilized when sending e-mails from Aspen.
+- Added a new feature: System variable 'preferredMailSender'. This allows for ordering the different mail senders (SMTP, SendGrid, AmazonSES) to set the priority order in which they should be used.
// other
diff --git a/code/web/sys/DBMaintenance/version_updates/24.07.00.php b/code/web/sys/DBMaintenance/version_updates/24.07.00.php
index ad9bbd9cbb..050d4100d3 100644
--- a/code/web/sys/DBMaintenance/version_updates/24.07.00.php
+++ b/code/web/sys/DBMaintenance/version_updates/24.07.00.php
@@ -50,6 +50,15 @@ function getUpdates24_07_00(): array {
],
], //permissions_create_administer_smtp
+ 'systemVariables_preferredMailSender' => [
+ 'title' => 'System Variables - Preferred Mail Sender',
+ 'description' => 'Allow sortable configuration of which mail sender to use by order of priority.',
+ 'sql' => [
+ "alter table system_variables ADD COLUMN preferredMailSender varchar(128) DEFAULT 'SMTP|AmazonSES|SendGrid'",
+ ],
+ ],
+ //systemVariables_preferredMailSender
+
//other
diff --git a/code/web/sys/DataObjectUtil.php b/code/web/sys/DataObjectUtil.php
index 8b907e2b90..7c34222c3f 100644
--- a/code/web/sys/DataObjectUtil.php
+++ b/code/web/sys/DataObjectUtil.php
@@ -575,6 +575,8 @@ static function processProperty(DataObject $object, $property) {
}
$object->$propertyName = $values;
+ } elseif ($property['type'] == 'sortableList') {
+ $object->setProperty($propertyName, $_REQUEST[$propertyName], $property);
}
}
}
\ No newline at end of file
diff --git a/code/web/sys/Email/Mailer.php b/code/web/sys/Email/Mailer.php
index e4fbd2e53b..fe2c12cfa9 100644
--- a/code/web/sys/Email/Mailer.php
+++ b/code/web/sys/Email/Mailer.php
@@ -22,20 +22,17 @@ public function send($to, $subject, $body, $replyTo = null, $htmlBody = null, $a
require_once ROOT_DIR . '/sys/Email/AmazonSesSetting.php';
require_once ROOT_DIR . '/sys/Email/SMTPSetting.php';
require_once ROOT_DIR . '/sys/CurlWrapper.php';
+ require_once ROOT_DIR . '/sys/SystemVariables.php';
//TODO: Do validation of the address
- $amazonSesSettings = new AmazonSesSetting();
- $smtpServerSettings = new SMTPSetting();
- if($smtpServerSettings->find(true)) {
- $result = $this->sendViaSMTP($smtpServerSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments);
- }elseif ($amazonSesSettings->find(true)) {
- $result = $this->sendViaAmazonSes($amazonSesSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments);
- } else {
- $sendGridSettings = new SendGridSetting();
- if ($sendGridSettings->find(true)) {
- $result = $this->sendViaSendGrid($sendGridSettings, $to, $replyTo, $subject, $body, $htmlBody);
- } else {
- $result = false;
+ $systemVariables = new SystemVariables();
+ if ($systemVariables->find(true) && !empty($systemVariables->preferredMailSender)) {
+ $mailSenders = explode("|", $systemVariables->preferredMailSender);
+ foreach ($mailSenders as $mailSender){
+ $result = $this->sendViaAbstractSender($mailSender, $to, $replyTo, $subject, $body, $htmlBody, $attachments);
+ if ($result) {
+ break;
+ }
}
}
@@ -145,4 +142,25 @@ private function sendViaAmazonSes(AmazonSesSetting $amazonSesSettings, string $t
private function sendViaSMTP(SMTPSetting $smtpSettings, string $to, ?string $replyTo, string $subject, ?string $body, ?string $htmlBody, ?array $attachments): bool {
return $smtpSettings->sendEmail($to, $replyTo, $subject, $body, $htmlBody, $attachments);
}
+
+ private function sendViaAbstractSender($mailSender, $to, $replyTo, $subject, $body, $htmlBody, $attachments) {
+ $result = false;
+ if($mailSender == 'AmazonSES') {
+ $amazonSesSettings = new AmazonSesSetting();
+ if($amazonSesSettings->find(true)){
+ $result = $this->sendViaAmazonSes($amazonSesSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments);
+ }
+ } else if($mailSender == 'SendGrid') {
+ $sendGridSettings = new SendGridSetting();
+ if($sendGridSettings->find(true)){
+ $result = $this->sendViaSendGrid($sendGridSettings, $to, $replyTo, $subject, $body, $htmlBody);
+ }
+ } else if($mailSender == 'SMTP') {
+ $smtpSettings = new SMTPSetting();
+ if($smtpSettings->find(true)){
+ $result = $this->sendViaSMTP($smtpSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments);
+ }
+ }
+ return $result;
+ }
}
\ No newline at end of file
diff --git a/code/web/sys/SystemVariables.php b/code/web/sys/SystemVariables.php
index 8c0542e5bc..82ab838db9 100644
--- a/code/web/sys/SystemVariables.php
+++ b/code/web/sys/SystemVariables.php
@@ -7,6 +7,7 @@ class SystemVariables extends DataObject {
public $errorEmail;
public $ticketEmail;
public $searchErrorEmail;
+ public $preferredMailSender;
public $loadCoversFrom020z;
public $currencyCode;
public $runNightlyFullIndex;
@@ -59,26 +60,46 @@ static function getObjectStructure($context = ''): array {
'description' => 'URL of the community content server',
'maxLength' => 128,
],
- 'errorEmail' => [
- 'property' => 'errorEmail',
- 'type' => 'text',
- 'label' => 'Error Email Address',
- 'description' => 'Email Address to send errors to',
- 'maxLength' => 128,
- ],
- 'ticketEmail' => [
- 'property' => 'ticketEmail',
- 'type' => 'text',
- 'label' => 'Ticket Email Address',
- 'description' => 'Email Address to send tickets from administrators to',
- 'maxLength' => 128,
- ],
- 'searchErrorEmail' => [
- 'property' => 'searchErrorEmail',
- 'type' => 'text',
- 'label' => 'Search Error Email Address',
- 'description' => 'Email Address to send errors to',
- 'maxLength' => 128,
+ 'emailSection' => [
+ 'property' => 'emailSection',
+ 'type' => 'section',
+ 'label' => 'Email Settings',
+ 'hideInLists' => true,
+ 'expandByDefault' => true,
+ 'properties' => [
+ 'errorEmail' => [
+ 'property' => 'errorEmail',
+ 'type' => 'text',
+ 'label' => 'Error Email Address',
+ 'description' => 'Email Address to send errors to',
+ 'maxLength' => 128,
+ ],
+ 'ticketEmail' => [
+ 'property' => 'ticketEmail',
+ 'type' => 'text',
+ 'label' => 'Ticket Email Address',
+ 'description' => 'Email Address to send tickets from administrators to',
+ 'maxLength' => 128,
+ ],
+ 'searchErrorEmail' => [
+ 'property' => 'searchErrorEmail',
+ 'type' => 'text',
+ 'label' => 'Search Error Email Address',
+ 'description' => 'Email Address to send errors to',
+ 'maxLength' => 128,
+ ],
+ 'preferredMailSender' => [
+ 'property' => 'preferredMailSender',
+ 'type' => 'sortableList',
+ 'values' => [
+ 'AmazonSES' => 'AmazonSES',
+ 'SendGrid' => 'SendGrid',
+ 'SMTP' => 'SMTP',
+ ],
+ 'label' => 'Preferred Mail Sender Order',
+ 'description' => 'Sort order of preferred mail sender',
+ ],
+ ]
],
'googleBucket' => [
'property' => 'googleBucket',
diff --git a/install/aspen.sql b/install/aspen.sql
index b96acb6881..98f86fd97f 100644
--- a/install/aspen.sql
+++ b/install/aspen.sql
@@ -4949,6 +4949,7 @@ CREATE TABLE `system_variables` (
`errorEmail` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`ticketEmail` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`searchErrorEmail` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+ `preferredMailSender` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'SMTP|AmazonSES|SendGrid',
`loadCoversFrom020z` tinyint(1) DEFAULT '0',
`runNightlyFullIndex` tinyint(1) DEFAULT '0',
`currencyCode` char(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'USD',