*/ private array $attemptCache = []; public function appendSent(array $credentials, string $rawMime, string $attemptId): void { if (isset($this->attemptCache[$attemptId])) { return; } $host = (string) ($credentials['imap_host'] ?? ''); $port = (int) ($credentials['imap_port'] ?? 993); $user = (string) ($credentials['imap_user'] ?? ''); $pass = (string) ($credentials['imap_password'] ?? ''); $folder = (string) ($credentials['imap_sent_folder'] ?? 'Sent'); $flags = (string) ($credentials['imap_mailbox_flags'] ?? '/imap/ssl'); if ($host === '' || $user === '' || $pass === '') { throw new \RuntimeException('IMAP credentials are missing.'); } if (!function_exists('imap_open') || !function_exists('imap_append')) { throw new \RuntimeException('IMAP extension is not available in PHP runtime.'); } $mailbox = sprintf('{%s:%d%s}%s', $host, $port, $flags, $folder); $imap = @imap_open($mailbox, $user, $pass); if ($imap === false) { throw new \RuntimeException('Failed to open IMAP mailbox: ' . (imap_last_error() ?: 'unknown error')); } try { if (!@imap_append($imap, $mailbox, $rawMime . "\r\n", "\\Seen")) { throw new \RuntimeException('Failed to append to IMAP Sent folder: ' . (imap_last_error() ?: 'unknown error')); } $this->attemptCache[$attemptId] = true; } finally { imap_close($imap); } } }