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');
}
}