diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php index 10cf9ae2863fe..42dadd3d56498 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\Mail\Provider\IManager as IMailManager; +use OCP\IAppConfig; /** * Class ShareByMail @@ -58,6 +60,7 @@ public function identifier(): string { public function __construct( private IConfig $config, + private IAppConfig $appConfig, private IDBConnection $dbConnection, private ISecureRandom $secureRandom, private IUserManager $userManager, @@ -70,6 +73,7 @@ public function __construct( private SettingsManager $settingsManager, private Defaults $defaults, private IHasher $hasher, + private IMailManager $mailManager, private IEventDispatcher $eventDispatcher, private IShareManager $shareManager, private IEmailValidator $emailValidator, @@ -327,6 +331,7 @@ protected function sendEmail(IShare $share, array $emails): void { $shareWith = $share->getSharedWith(); $initiatorUser = $this->userManager->get($initiator); + $initiatorEmail = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null; $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; $message = $this->mailer->createMessage(); @@ -386,7 +391,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.