sendViaBrevoApi($notifiable, $apiKey); // Kembalikan array kosong agar Laravel tidak memproses channel mail return []; } // Fallback: gunakan mail channel SMTP biasa (untuk lokal) return ['mail']; } /** * Kirim email reset sandi menggunakan Brevo HTTP API. * Menggunakan HTTP (bukan SMTP) sehingga tidak terblokir di Railway. */ protected function sendViaBrevoApi($notifiable, string $apiKey): void { $url = $this->resetUrl($notifiable); $expire = config('auth.passwords.' . config('auth.defaults.passwords') . '.expire', 60); $htmlContent = "

Permintaan Reset Kata Sandi

Halo, " . ($notifiable->name ?? '') . "!

Anda menerima email ini karena kami menerima permintaan untuk menyetel ulang kata sandi akun Anda di mylaundry.

Reset Kata Sandi

Tautan ini akan kedaluwarsa dalam {$expire} menit.

Jika Anda tidak meminta reset kata sandi, abaikan email ini.


Salam hangat, mylaundry

"; try { $response = Http::timeout(10)->withHeaders([ 'api-key' => $apiKey, 'Content-Type' => 'application/json', 'Accept' => 'application/json', ])->post('https://api.brevo.com/v3/smtp/email', [ 'sender' => [ 'name' => config('mail.from.name', 'mylaundry'), 'email' => config('mail.from.address'), ], 'to' => [ ['email' => $notifiable->email, 'name' => $notifiable->name ?? ''], ], 'subject' => 'Permintaan Reset Kata Sandi - mylaundry', 'htmlContent' => $htmlContent, ]); if ($response->successful()) { Log::info('Brevo API: Email reset sandi berhasil dikirim ke ' . $notifiable->email); } else { Log::error('Brevo API Error [' . $response->status() . ']: ' . $response->body()); } } catch (\Exception $e) { Log::error('Brevo API Exception: ' . $e->getMessage()); } } /** * Build the mail representation (digunakan sebagai fallback SMTP lokal). */ public function toMail($notifiable): MailMessage { if (static::$toMailCallback) { return call_user_func(static::$toMailCallback, $notifiable, $this->token); } $url = $this->resetUrl($notifiable); $expire = config('auth.passwords.' . config('auth.defaults.passwords') . '.expire', 60); return (new MailMessage) ->subject('Permintaan Reset Kata Sandi - mylaundry') ->greeting('Halo!') ->line('Anda menerima email ini karena kami menerima permintaan untuk menyetel ulang kata sandi akun Anda.') ->action('Reset Kata Sandi', $url) ->line("Tautan reset kata sandi ini akan kedaluwarsa dalam waktu {$expire} menit.") ->line('Jika Anda tidak meminta reset kata sandi, abaikan email ini.') ->salutation('Salam hangat, mylaundry'); } }