$this->mailSettings->get(), 'templates' => $this->emailTemplates->all(), ]); } public function updateSmtp(Request $request): RedirectResponse { $data = $request->validate([ 'mail_mailer' => ['required', 'in:smtp,log,array'], 'mail_host' => ['required', 'string', 'max:255'], 'mail_port' => ['required', 'integer', 'min:1', 'max:65535'], 'mail_username' => ['nullable', 'string', 'max:255'], 'mail_password' => ['nullable', 'string', 'max:255'], 'mail_encryption' => ['nullable', 'in:ssl,tls,null,'], 'mail_from_address' => ['required', 'email', 'max:255'], 'mail_from_name' => ['required', 'string', 'max:255'], ]); if (($data['mail_encryption'] ?? '') === 'null' || ($data['mail_encryption'] ?? '') === '') { $data['mail_encryption'] = ''; } $this->mailSettings->update($data); $request->attributes->set('audit_metadata', [ 'host' => $data['mail_host'], 'from' => $data['mail_from_address'], ]); return back()->with('success', 'SMTP settings saved.'); } public function testEmail(Request $request): RedirectResponse { $data = $request->validate([ 'test_email' => ['required', 'email', 'max:255'], ]); try { $this->mailDelivery->sendTest($data['test_email']); $request->attributes->set('audit_metadata', ['recipient' => $data['test_email']]); return back()->with('success', 'Test email sent to ' . $data['test_email'] . '.'); } catch (Throwable) { return back()->with('error', 'Failed to send test email. Check SMTP settings.'); } } public function updateTemplate(Request $request, string $slug): RedirectResponse { $data = $request->validate([ 'subject' => ['required', 'string', 'max:255'], 'body_html' => ['required', 'string', 'max:50000'], ]); $this->emailTemplates->update($slug, $data['subject'], $data['body_html']); $request->attributes->set('audit_metadata', ['template' => $slug]); return back()->with('success', 'Email template updated.'); } public function testTemplate(Request $request, string $slug): RedirectResponse { $allowed = ['password_reset', 'password_changed']; if (! in_array($slug, $allowed, true)) { return back()->with('error', 'Template preview is not available for this slug.'); } $data = $request->validate([ 'test_email' => ['required', 'email', 'max:255'], ]); try { $this->emailTemplates->get($slug); $this->mailDelivery->sendTemplatePreview($data['test_email'], $slug); $request->attributes->set('audit_metadata', [ 'template' => $slug, 'recipient' => $data['test_email'], ]); return back()->with('success', "Preview [{$slug}] sent to {$data['test_email']}."); } catch (Throwable) { return back()->with('error', 'Failed to send template preview. Check SMTP settings.'); } } }