diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php index 16e3068b15b90..49f7549cb3324 100644 --- a/apps/sharebymail/lib/ShareByMailProvider.php +++ b/apps/sharebymail/lib/ShareByMailProvider.php @@ -39,6 +39,8 @@ use OCP\Share\IShareProviderWithNotification; use OCP\Util; use Psr\Log\LoggerInterface; +use OCP\IAppConfig; +use OCP\Mail\Provider\IManager as IMailManager; /** * Class ShareByMail @@ -57,6 +59,7 @@ public function identifier(): string { public function __construct( private IConfig $config, + private IAppConfig $appConfig, private IDBConnection $dbConnection, private ISecureRandom $secureRandom, private IUserManager $userManager, @@ -72,6 +75,7 @@ public function __construct( private IEventDispatcher $eventDispatcher, private IShareManager $shareManager, private IEmailValidator $emailValidator, + private IMailManager $mailManager, ) { } @@ -322,6 +326,7 @@ protected function sendEmail(IShare $share, array $emails): void { $initiatorUser = $this->userManager->get($initiator); $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; + $initiatorEmail = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null; $message = $this->mailer->createMessage(); $emailTemplate = $this->mailer->createEMailTemplate('sharebymail.RecipientNotification', [ @@ -380,7 +385,17 @@ protected function sendEmail(IShare $share, array $emails): void { ] ); } - $message->setFrom([Util::getDefaultEmailAddress($instanceName) => $senderName]); + $fromAddress = Util::getDefaultEmailAddress(user_part: $instanceName); + $mailProvidersEnabled = $this->appConfig->getValueBool('core', 'mail_providers_enabled'); + if ($mailProvidersEnabled && $this->mailManager->has()) { + if ($initiatorEmail !== null) { + $service = $this->mailManager->findServiceByAddress($initiator, $initiatorEmail); + if ($service !== null) { + $fromAddress = $service->getPrimaryAddress()->getAddress(); + } + } + } + $message->setFrom([$fromAddress => $senderName]); // The "Reply-To" is set to the sharer if an mail address is configured // also the default footer contains a "Do not reply" which needs to be adjusted.