diff --git a/src/app/Mail/Helper.php b/src/app/Mail/Helper.php
--- a/src/app/Mail/Helper.php
+++ b/src/app/Mail/Helper.php
@@ -69,10 +69,12 @@
                 $mail->cc($params['cc']);
             }
 
-            $fromAddress = Tenant::getConfig($tenantId, 'mail.from.address');
-            $fromName = Tenant::getConfig($tenantId, 'mail.from.name');
-            $replytoAddress = Tenant::getConfig($tenantId, 'mail.reply_to.address');
-            $replytoName = Tenant::getConfig($tenantId, 'mail.reply_to.name');
+            // Note: We're not using Laravel's global 'from' and 'reply_to' settings
+
+            $fromAddress = Tenant::getConfig($tenantId, 'mail.sender.address');
+            $fromName = Tenant::getConfig($tenantId, 'mail.sender.name');
+            $replytoAddress = Tenant::getConfig($tenantId, 'mail.replyto.address');
+            $replytoName = Tenant::getConfig($tenantId, 'mail.replyto.name');
 
             if ($fromAddress) {
                 $mail->from($fromAddress, $fromName);
diff --git a/src/config/mail.php b/src/config/mail.php
--- a/src/config/mail.php
+++ b/src/config/mail.php
@@ -92,9 +92,13 @@
     |
     */
 
-    'from' => [
-        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
-        'name' => env('MAIL_FROM_NAME', 'Example'),
+    // Note: Laravel uses 'from', we added 'sender'. This way we make sure
+    // Laravel does not overwrite our From header that we set in App\Mail\Helper::sendMail().
+
+    'from' => null, // do not use!
+    'sender' => [
+        'address' => env('MAIL_FROM_ADDRESS', ''),
+        'name' => env('MAIL_FROM_NAME', ''),
     ],
 
     /*
@@ -108,7 +112,13 @@
     |
     */
 
-    'reply_to' => [
+    // Note: Laravel uses 'reply_to', we added 'replyto'. This way we make sure
+    // Laravel does not add an extra Reply-To header on top of our per-tenant
+    // Reply-To header that we set in App\Mail\Helper::sendMail().
+    // More https://github.com/laravel/framework/issues/43034.
+
+    'reply_to' => null, // do not use!
+    'replyto' => [
         'address' => env('MAIL_REPLYTO_ADDRESS', ''),
         'name' => env('MAIL_REPLYTO_NAME', ''),
     ],
diff --git a/src/tests/Feature/Jobs/Password/RetentionEmailJobTest.php b/src/tests/Feature/Jobs/Password/RetentionEmailJobTest.php
--- a/src/tests/Feature/Jobs/Password/RetentionEmailJobTest.php
+++ b/src/tests/Feature/Jobs/Password/RetentionEmailJobTest.php
@@ -68,8 +68,8 @@
 
         // Assert sender
         Mail::assertSent(PasswordExpirationReminder::class, function ($mail) {
-            return $mail->hasFrom(\config('mail.from.address'), \config('mail.from.name'))
-                && $mail->hasReplyTo(\config('mail.reply_to.address'), \config('mail.reply_to.name'));
+            return $mail->hasFrom(\config('mail.sender.address'), \config('mail.sender.name'))
+                && $mail->hasReplyTo(\config('mail.replyto.address'), \config('mail.replyto.name'));
         });
     }
 }
diff --git a/src/tests/Feature/Jobs/PasswordResetEmailTest.php b/src/tests/Feature/Jobs/PasswordResetEmailTest.php
--- a/src/tests/Feature/Jobs/PasswordResetEmailTest.php
+++ b/src/tests/Feature/Jobs/PasswordResetEmailTest.php
@@ -68,8 +68,8 @@
 
         // Assert sender
         Mail::assertSent(PasswordReset::class, function ($mail) {
-            return $mail->hasFrom(\config('mail.from.address'), \config('mail.from.name'))
-                && $mail->hasReplyTo(\config('mail.reply_to.address'), \config('mail.reply_to.name'));
+            return $mail->hasFrom(\config('mail.sender.address'), \config('mail.sender.name'))
+                && $mail->hasReplyTo(\config('mail.replyto.address'), \config('mail.replyto.name'));
         });
     }
 }
diff --git a/src/tests/Unit/Mail/HelperTest.php b/src/tests/Unit/Mail/HelperTest.php
--- a/src/tests/Unit/Mail/HelperTest.php
+++ b/src/tests/Unit/Mail/HelperTest.php
@@ -51,8 +51,8 @@
         Mail::assertSent(\App\Mail\SignupInvitation::class, function ($mail) {
             return $mail->hasTo('to@test.com')
                 && $mail->hasCc('cc@test.com')
-                && $mail->hasFrom(\config('mail.from.address'), \config('mail.from.name'))
-                && $mail->hasReplyTo(\config('mail.reply_to.address'), \config('mail.reply_to.name'));
+                && $mail->hasFrom(\config('mail.sender.address'), \config('mail.sender.name'))
+                && $mail->hasReplyTo(\config('mail.replyto.address'), \config('mail.replyto.name'));
         });
 
         // Test with a tenant (but no per-tenant settings)
@@ -67,18 +67,18 @@
         Mail::assertSent(\App\Mail\SignupInvitation::class, function ($mail) {
             return $mail->hasTo('to@test.com')
                 && $mail->hasCc('cc@test.com')
-                && $mail->hasFrom(\config('mail.from.address'), \config('mail.from.name'))
-                && $mail->hasReplyTo(\config('mail.reply_to.address'), \config('mail.reply_to.name'));
+                && $mail->hasFrom(\config('mail.sender.address'), \config('mail.sender.name'))
+                && $mail->hasReplyTo(\config('mail.replyto.address'), \config('mail.replyto.name'));
         });
 
         // Test with a tenant (but with per-tenant settings)
         Mail::fake();
 
         $tenant->setSettings([
-            'mail.from.address' => 'from@test.com',
-            'mail.from.name' => 'from name',
-            'mail.reply_to.address' => 'replyto@test.com',
-            'mail.reply_to.name' => 'replyto name',
+            'mail.sender.address' => 'from@test.com',
+            'mail.sender.name' => 'from name',
+            'mail.replyto.address' => 'replyto@test.com',
+            'mail.replyto.name' => 'replyto name',
         ]);
 
         $mail = new \App\Mail\SignupInvitation($invitation);