fix(email): Emails are not sent in multiple cases

- fix(email): transactional emails are all not sent if `Use system wide (transactional) email settings` is disabled and no other email provide is setup on the Notifications page
- fix(email): no emails are sent if SMTP username and SMTP password are empty (which is the case in dev for example)
- fix(email): Wrong test email notification is used, causing the transactional email test notification to fail if no email provider is set up on the Notifications page.
This commit is contained in:
peaklabs-dev
2025-04-02 16:28:14 +02:00
parent 78e2d63f38
commit d15f1b9b94
5 changed files with 11 additions and 7 deletions

View File

@@ -4,7 +4,7 @@ namespace App\Livewire;
use App\Models\InstanceSettings; use App\Models\InstanceSettings;
use App\Models\Team; use App\Models\Team;
use App\Notifications\Test; use App\Notifications\TransactionalEmails\Test;
use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\RateLimiter;
use Livewire\Attributes\Locked; use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate; use Livewire\Attributes\Validate;

View File

@@ -12,8 +12,9 @@ class EmailChannel
public function send(SendsEmail $notifiable, Notification $notification): void public function send(SendsEmail $notifiable, Notification $notification): void
{ {
$useInstanceEmailSettings = $notifiable->emailNotificationSettings->use_instance_email_settings; $useInstanceEmailSettings = $notifiable->emailNotificationSettings->use_instance_email_settings;
$isTransactionalEmail = data_get($notification, 'isTransactionalEmail', false);
$customEmails = data_get($notification, 'emails', null); $customEmails = data_get($notification, 'emails', null);
if ($useInstanceEmailSettings) { if ($useInstanceEmailSettings || $isTransactionalEmail) {
$settings = instanceSettings(); $settings = instanceSettings();
} else { } else {
$settings = $notifiable->emailNotificationSettings; $settings = $notifiable->emailNotificationSettings;
@@ -49,8 +50,8 @@ class EmailChannel
$settings->smtp_port, $settings->smtp_port,
$encryption $encryption
); );
$transport->setUsername($settings->smtp_username); $transport->setUsername($settings->smtp_username ?? '');
$transport->setPassword($settings->smtp_password); $transport->setPassword($settings->smtp_password ?? '');
$mailer = new \Symfony\Component\Mailer\Mailer($transport); $mailer = new \Symfony\Component\Mailer\Mailer($transport);

View File

@@ -16,9 +16,10 @@ class InvitationLink extends CustomEmailNotification
return [TransactionalEmailChannel::class]; return [TransactionalEmailChannel::class];
} }
public function __construct(public User $user) public function __construct(public User $user, public bool $isTransactionalEmail)
{ {
$this->onQueue('high'); $this->onQueue('high');
$this->isTransactionalEmail = true;
} }
public function toMail(): MailMessage public function toMail(): MailMessage

View File

@@ -17,10 +17,11 @@ class ResetPassword extends Notification
public InstanceSettings $settings; public InstanceSettings $settings;
public function __construct($token) public function __construct($token, public bool $isTransactionalEmail)
{ {
$this->settings = instanceSettings(); $this->settings = instanceSettings();
$this->token = $token; $this->token = $token;
$this->isTransactionalEmail = true;
} }
public static function createUrlUsing($callback) public static function createUrlUsing($callback)

View File

@@ -8,9 +8,10 @@ use Illuminate\Notifications\Messages\MailMessage;
class Test extends CustomEmailNotification class Test extends CustomEmailNotification
{ {
public function __construct(public string $emails) public function __construct(public string $emails, public string $isTransactionalEmail)
{ {
$this->onQueue('high'); $this->onQueue('high');
$this->isTransactionalEmail = true;
} }
public function via(): array public function via(): array