'boolean', 'signature_enabled' => 'boolean', 'last_sync_at' => 'datetime', ]; public function folders(): HasMany { return $this->hasMany(EmailFolder::class)->orderBy('sort_order'); } public function getImapConfig(): array { return [ 'host' => $this->imap_host, 'port' => $this->imap_port, 'encryption' => $this->imap_encryption, 'username' => $this->imap_username, 'password' => $this->imap_password, ]; } public function getDecryptedPassword(): string { if (empty($this->imap_password)) { return ''; } try { return Crypt::decryptString($this->imap_password); } catch (\Exception $e) { return $this->imap_password; } } public function getDecryptedSmtpPassword(): string { if (empty($this->smtp_password)) { return $this->getDecryptedPassword(); } try { return Crypt::decryptString($this->smtp_password); } catch (\Exception $e) { return $this->smtp_password; } } public function getSmtpConfig(): array { return [ 'host' => $this->smtp_host ?? $this->imap_host, 'port' => $this->smtp_port ?? 587, 'encryption' => $this->smtp_encryption ?? 'tls', 'username' => $this->smtp_username ?? $this->imap_username, 'password' => $this->smtp_password ?? $this->imap_password, ]; } public function getImapClient(): ?\DirectoryTree\ImapEngine\Mailbox { if (!$this->imap_host || !$this->imap_username) { return null; } try { $encryption = match ($this->imap_encryption) { 'ssl' => 'ssl', 'tls' => 'tls', default => 'none', }; return new \DirectoryTree\ImapEngine\Mailbox([ 'host' => $this->imap_host, 'port' => $this->imap_port ?? 993, 'encryption' => $encryption, 'validate_cert' => false, 'username' => $this->imap_username, 'password' => $this->getDecryptedPassword(), ]); } catch (\Exception $e) { return null; } } public function testConnection(): array { try { $mailbox = $this->getImapClient(); if (!$mailbox) { return ['success' => false, 'message' => 'Configurazione IMAP non valida']; } $mailbox->connect(); $mailbox->disconnect(); return [ 'success' => true, 'message' => 'Connessione IMAP riuscita! Server: ' . $this->imap_host ]; } catch (\Exception $e) { $message = $e->getMessage(); if (strpos($message, 'Undefined property') !== false) { return ['success' => true, 'message' => 'Connessione IMAP riuscita! (Server: ' . $this->imap_host . ')']; } return ['success' => false, 'message' => $message]; } } public static function getActive() { return self::where('is_active', true)->first(); } public function getSignature(): ?string { return $this->signature; } }