token = $token; } /** * Configura el canal de la notificación. */ public function via($notifiable) { return ['mail']; } /** * Configura el mensaje de correo. */ public function toMail($notifiable) { try { // Cargar configuración SMTP desde la base de datos $this->loadDynamicMailConfig(); $resetUrl = url(route('password.reset', [ 'token' => $this->token, 'email' => $notifiable->getEmailForPasswordReset() ], false)); $appTitle = Setting::global()->where('key', 'website_title')->first()->value ?? Config::get('_var.appTitle'); $imageBase64 = 'data:image/png;base64,' . base64_encode(file_get_contents(public_path('/assets/img/logo/koneko-04.png'))); $expireMinutes = Config::get('auth.passwords.' . Config::get('auth.defaults.passwords') . '.expire', 60); Config::set('app.name', $appTitle); return (new MailMessage) ->subject("Restablece tu contraseña - {$appTitle}") ->markdown('admin::notifications.email', [ // Usar tu plantilla del módulo 'greeting' => "Hola {$notifiable->name}", 'introLines' => [ 'Estás recibiendo este correo porque solicitaste restablecer tu contraseña.', ], 'actionText' => 'Restablecer contraseña', 'actionUrl' => $resetUrl, 'outroLines' => [ "Este enlace expirará en {$expireMinutes} minutos.", 'Si no solicitaste este cambio, no se requiere realizar ninguna acción.', ], 'displayableActionUrl' => $resetUrl, // Para el subcopy 'image' => $imageBase64, // Imagen del logo ]); /* */ } catch (\Exception $e) { // Registrar el error Log::error('Error al enviar el correo de restablecimiento: ' . $e->getMessage()); // Retornar un mensaje alternativo return (new MailMessage) ->subject('Restablece tu contraseña') ->line('Ocurrió un error al enviar el correo. Por favor, intenta de nuevo más tarde.'); } } /** * Cargar configuración SMTP desde la base de datos. */ protected function loadDynamicMailConfig() { try { $smtpConfig = Setting::where('key', 'LIKE', 'mail_%') ->pluck('value', 'key'); if ($smtpConfig->isEmpty()) { throw new Exception('No SMTP configuration found in the database.'); } Config::set('mail.mailers.smtp.host', $smtpConfig['mail_mailers_smtp_host'] ?? null); Config::set('mail.mailers.smtp.port', $smtpConfig['mail_mailers_smtp_port'] ?? null); Config::set('mail.mailers.smtp.username', $smtpConfig['mail_mailers_smtp_username'] ?? null); Config::set( 'mail.mailers.smtp.password', isset($smtpConfig['mail_mailers_smtp_password']) ? Crypt::decryptString($smtpConfig['mail_mailers_smtp_password']) : null ); Config::set('mail.mailers.smtp.encryption', $smtpConfig['mail_mailers_smtp_encryption'] ?? null); Config::set('mail.from.address', $smtpConfig['mail_from_address'] ?? null); Config::set('mail.from.name', $smtpConfig['mail_from_name'] ?? null); } catch (Exception $e) { Log::error('SMTP Configuration Error: ' . $e->getMessage()); // Opcional: Puedes lanzar la excepción o manejarla de otra manera. throw new Exception('Error al cargar la configuración SMTP.'); } } }