diff options
| -rw-r--r-- | app/Services/MailService.php | 11 | ||||
| -rw-r--r-- | app/SiteUser.php | 3 | ||||
| -rw-r--r-- | app/TreeUser.php | 36 | ||||
| -rw-r--r-- | tests/app/SiteUserTest.php | 5 | ||||
| -rw-r--r-- | tests/app/TreeUserTest.php | 2 |
5 files changed, 37 insertions, 20 deletions
diff --git a/app/Services/MailService.php b/app/Services/MailService.php index 949a048dee..2e4d3d45e5 100644 --- a/app/Services/MailService.php +++ b/app/Services/MailService.php @@ -30,6 +30,7 @@ use Swift_Signers_DKIMSigner; use Swift_SmtpTransport; use Swift_Transport; use Throwable; +use function app; use function filter_var; use function function_exists; use function gethostbyaddr; @@ -66,14 +67,18 @@ class MailService $message_text = str_replace("\n", "\r\n", $message_text); $message_html = str_replace("\n", "\r\n", $message_html); + // Special accounts do not have an email address. Use the system one. + $from_email = $from->email() ?: $this->senderEmail(); + $reply_to_email = $reply_to->email() ?: $this->senderEmail(); + $message = (new Swift_Message()) ->setSubject($subject) - ->setFrom($from->email(), $from->realName()) + ->setFrom($from_email, $from->realName()) ->setTo($to->email(), $to->realName()) ->setBody($message_html, 'text/html'); - if ($from->email() !== $reply_to->email()) { - $message->setReplyTo($reply_to->email(), $reply_to->realName()); + if ($from_email !== $reply_to_email) { + $message->setReplyTo($reply_to_email, $reply_to->realName()); } $dkim_domain = Site::getPreference('DKIM_DOMAIN'); diff --git a/app/SiteUser.php b/app/SiteUser.php index 4a435e755d..d4cacd7eb7 100644 --- a/app/SiteUser.php +++ b/app/SiteUser.php @@ -18,6 +18,7 @@ declare(strict_types=1); namespace Fisharebest\Webtrees; use Fisharebest\Webtrees\Contracts\UserInterface; +use Fisharebest\Webtrees\Services\MailService; /** * The site can act as a user, for example to send email. @@ -44,7 +45,7 @@ class SiteUser implements UserInterface */ public function email(): string { - return Site::getPreference('SMTP_FROM_NAME', 'no-reply@localhost'); + return ''; } /** diff --git a/app/TreeUser.php b/app/TreeUser.php index 6cd21e61df..3b184abe8e 100644 --- a/app/TreeUser.php +++ b/app/TreeUser.php @@ -18,6 +18,7 @@ declare(strict_types=1); namespace Fisharebest\Webtrees; use Fisharebest\Webtrees\Contracts\UserInterface; +use Fisharebest\Webtrees\Services\UserService; /** * A tree can act as a user, for example to send email. @@ -56,38 +57,51 @@ class TreeUser implements UserInterface */ public function email(): string { - return Site::getPreference('SMTP_FROM_NAME', 'no-reply@localhost'); + $user_service = app(UserService::class); + $contact_id = (int) $this->getPreference('CONTACT_USER_ID'); + + if ($contact_id === 0) { + return ''; + } + + $contact = $user_service->find($contact_id); + + if ($contact instanceof User) { + return $contact->email(); + } + + return ''; } /** - * The user‘s real name. + * @param string $setting_name + * @param string $default * * @return string */ - public function realName(): string + public function getPreference(string $setting_name, string $default = ''): string { - return $this->tree->title(); + return $default; } /** - * The user‘s login name. + * The user‘s real name. * * @return string */ - public function userName(): string + public function realName(): string { - return ''; + return $this->tree->title(); } /** - * @param string $setting_name - * @param string $default + * The user‘s login name. * * @return string */ - public function getPreference(string $setting_name, string $default = ''): string + public function userName(): string { - return $default; + return ''; } /** diff --git a/tests/app/SiteUserTest.php b/tests/app/SiteUserTest.php index 695dfe8260..fb163d9524 100644 --- a/tests/app/SiteUserTest.php +++ b/tests/app/SiteUserTest.php @@ -39,12 +39,9 @@ class SiteUserTest extends TestCase $this->assertInstanceOf(UserInterface::class, $user); $this->assertSame(0, $user->id()); - $this->assertSame('no-reply@localhost', $user->email()); + $this->assertSame('', $user->email()); $this->assertSame('webtrees', $user->realName()); $this->assertSame('', $user->userName()); - - Site::setPreference('SMTP_FROM_NAME', 'foo@example.com'); - $this->assertSame('foo@example.com', $user->email()); } /** diff --git a/tests/app/TreeUserTest.php b/tests/app/TreeUserTest.php index b6d83e8a4e..98cfd3cd94 100644 --- a/tests/app/TreeUserTest.php +++ b/tests/app/TreeUserTest.php @@ -41,7 +41,7 @@ class TreeUserTest extends TestCase $this->assertInstanceOf(UserInterface::class, $user); $this->assertSame(0, $user->id()); - $this->assertSame('no-reply@localhost', $user->email()); + $this->assertSame('', $user->email()); $this->assertSame('title', $user->realName()); $this->assertSame('', $user->userName()); } |
