mailSettings->apply(); $rendered = $this->templates->render($templateSlug, $variables); Mail::to($to)->send(new TemplatedMail($rendered['subject'], $rendered['html'])); } public function sendTemplatePreview(string $to, string $templateSlug): void { $variables = $this->templates->sampleVariables($templateSlug); $this->sendTemplated($to, $templateSlug, $variables); } public function sendTest(string $to): void { $this->mailSettings->apply(); $settings = $this->mailSettings->get(); Mail::raw( 'Test email dari ' . config('app.name') . ' pada ' . now()->format('Y-m-d H:i:s') . ' WIB.', function ($message) use ($to, $settings) { $message->to($to) ->subject('Test SMTP — ' . config('app.name')) ->from($settings['mail_from_address'], $settings['mail_from_name']); } ); } /** * @param list $recipients * @return list */ public function sendTestToMany(array $recipients): array { $sent = []; foreach (array_unique(array_filter(array_map('trim', $recipients))) as $to) { $this->sendTest($to); $sent[] = $to; } return $sent; } public function notifyPasswordChanged(string $email, string $username, string $displayName, ?string $changedBy = null): void { $this->sendTemplated($email, 'password_changed', [ 'username' => $username, 'display_name' => $displayName !== '' ? $displayName : $username, 'changed_at' => now()->format('Y-m-d H:i:s') . ' WIB', 'changed_by' => $changedBy ?? 'system', ]); } }