summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Services/MailService.php11
-rw-r--r--app/SiteUser.php3
-rw-r--r--app/TreeUser.php36
-rw-r--r--tests/app/SiteUserTest.php5
-rw-r--r--tests/app/TreeUserTest.php2
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());
}