 d15f1b9b94
			
		
	
	d15f1b9b94
	
	
	
		
			
			- 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.
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Notifications\Channels;
 | |
| 
 | |
| use Illuminate\Notifications\Notification;
 | |
| use Resend;
 | |
| 
 | |
| class EmailChannel
 | |
| {
 | |
|     public function __construct() {}
 | |
| 
 | |
|     public function send(SendsEmail $notifiable, Notification $notification): void
 | |
|     {
 | |
|         $useInstanceEmailSettings = $notifiable->emailNotificationSettings->use_instance_email_settings;
 | |
|         $isTransactionalEmail = data_get($notification, 'isTransactionalEmail', false);
 | |
|         $customEmails = data_get($notification, 'emails', null);
 | |
|         if ($useInstanceEmailSettings || $isTransactionalEmail) {
 | |
|             $settings = instanceSettings();
 | |
|         } else {
 | |
|             $settings = $notifiable->emailNotificationSettings;
 | |
|         }
 | |
|         $isResendEnabled = $settings->resend_enabled;
 | |
|         $isSmtpEnabled = $settings->smtp_enabled;
 | |
|         if ($customEmails) {
 | |
|             $recipients = [$customEmails];
 | |
|         } else {
 | |
|             $recipients = $notifiable->getRecipients();
 | |
|         }
 | |
|         $mailMessage = $notification->toMail($notifiable);
 | |
| 
 | |
|         if ($isResendEnabled) {
 | |
|             $resend = Resend::client($settings->resend_api_key);
 | |
|             $from = "{$settings->smtp_from_name} <{$settings->smtp_from_address}>";
 | |
|             $resend->emails->send([
 | |
|                 'from' => $from,
 | |
|                 'to' => $recipients,
 | |
|                 'subject' => $mailMessage->subject,
 | |
|                 'html' => (string) $mailMessage->render(),
 | |
|             ]);
 | |
|         } elseif ($isSmtpEnabled) {
 | |
|             $encryption = match (strtolower($settings->smtp_encryption)) {
 | |
|                 'starttls' => null,
 | |
|                 'tls' => 'tls',
 | |
|                 'none' => null,
 | |
|                 default => null,
 | |
|             };
 | |
| 
 | |
|             $transport = new \Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport(
 | |
|                 $settings->smtp_host,
 | |
|                 $settings->smtp_port,
 | |
|                 $encryption
 | |
|             );
 | |
|             $transport->setUsername($settings->smtp_username ?? '');
 | |
|             $transport->setPassword($settings->smtp_password ?? '');
 | |
| 
 | |
|             $mailer = new \Symfony\Component\Mailer\Mailer($transport);
 | |
| 
 | |
|             $fromEmail = $settings->smtp_from_address ?? 'noreply@localhost';
 | |
|             $fromName = $settings->smtp_from_name ?? 'System';
 | |
|             $from = new \Symfony\Component\Mime\Address($fromEmail, $fromName);
 | |
|             $email = (new \Symfony\Component\Mime\Email)
 | |
|                 ->from($from)
 | |
|                 ->to(...$recipients)
 | |
|                 ->subject($mailMessage->subject)
 | |
|                 ->html((string) $mailMessage->render());
 | |
| 
 | |
|             $mailer->send($email);
 | |
|         }
 | |
|     }
 | |
| }
 |