Skip to content

Commit

Permalink
Merge pull request #10258 from creative-commoners/pulls/4.9/email-array
Browse files Browse the repository at this point in the history
FIX Handle admin_email array config
  • Loading branch information
michalkleiner committed Mar 9, 2022
2 parents 018457a + 204b39b commit e1dd712
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
15 changes: 13 additions & 2 deletions src/Control/Email/Email.php
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,19 @@ public function setSwiftMessage($swiftMessage)
*/
private function getDefaultFrom(): string
{
$defaultFrom = $this->config()->get('admin_email');
if (!$defaultFrom) {
// admin_email can have a string or an array config
// https://docs.silverstripe.org/en/4/developer_guides/email/#administrator-emails
$adminEmail = $this->config()->get('admin_email');
if (is_array($adminEmail) && count($adminEmail) > 0) {
$defaultFrom = array_keys($adminEmail)[0];
} else {
if (is_string($adminEmail)) {
$defaultFrom = $adminEmail;
} else {
$defaultFrom = '';
}
}
if (empty($defaultFrom)) {
$host = Director::host();
if (empty($host)) {
throw new RuntimeException('Host not defined');
Expand Down
13 changes: 12 additions & 1 deletion tests/php/Control/Email/EmailTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -677,11 +677,22 @@ public function testGetDefaultFrom()
$method->setAccessible(true);

// default to no-reply@mydomain.com if admin_email config not set
Email::config()->set('admin_email', null);
$this->assertSame('no-reply@www.mysite.com', $method->invokeArgs($email, []));

// use admin_email config
// default to no-reply@mydomain.com if admin_email config is misconfigured
Email::config()->set('admin_email', 123);
$this->assertSame('no-reply@www.mysite.com', $method->invokeArgs($email, []));

// use admin_email config string syntax
Email::config()->set('admin_email', 'myadmin@somewhere.com');
$this->assertSame('myadmin@somewhere.com', $method->invokeArgs($email, []));
$this->assertTrue(true);

// use admin_email config array syntax
Email::config()->set('admin_email', ['anotheradmin@somewhere.com' => 'Admin-email']);
$this->assertSame('anotheradmin@somewhere.com', $method->invokeArgs($email, []));
$this->assertTrue(true);
}

/**
Expand Down

0 comments on commit e1dd712

Please sign in to comment.