Piano di miglioramento per javanile/php-imap2, una libreria PHP che implementa le funzioni imap_*() senza richiedere l'estensione C-IMAP, con supporto OAuth2.
File: composer.json:25-27
La dipendenza zbateson/mail-mime-parser è dichiarata due volte con versioni diverse. Manca una virgola alla fine della prima riga, causando un errore di parsing di Composer.
Fix: Unificare in un'unica riga: "zbateson/mail-mime-parser": "^2.2 || ^3.0 || ^4.0" e aggiungere la virgola mancante.
File: src/Mail.php:87-109
Il metodo send() referenzia variabili inesistenti ($imap, $options, $sequence, $flag) invece dei parametri reali ($to, $subject, $message). Sembra un copia-incolla da setFlagFull().
Fix: Riscrivere il metodo per inviare email correttamente, o rimuoverlo e lasciare che generi un errore chiaro.
File: src/Mailbox.php:313-355
Tutti e quattro i metodi chiamano $client->deleteFolder($mailbox) invece delle rispettive operazioni corrette. Pericoloso: chiamare imap2_subscribe() elimina la mailbox.
Fix: Sostituire deleteFolder() con le chiamate appropriate:
subscribe()→client->subscribe()unsubscribe()→client->unsubscribe()getSubscribed()→client->listSubscribed()listSubscribed()→client->listSubscribed()
File: src/Functions.php:193-195
Il metodo è dichiarato due volte: la seconda sovrascrive la prima e manca la parentesi di chiusura e la logica completa.
Fix: Unificare le due dichiarazioni in un unico metodo coerente.
File: src/Polyfill.php:83-103
Il metodo è dichiarato due volte con implementazioni diverse. La seconda sovrascrive la prima.
Fix: Unificare in un'unica implementazione.
File: bootstrap.php:857-859
Il blocco if (Functions::isRetrofitConnection($imap)) a riga 857 non ha la parentesi di chiusura }. Il codice successivo (riga 859) è eseguito comunque, creando un bug logico.
Fix: Aggiungere } a riga 858 e ristrutturare la logica condizionale correttamente.
File: src/Connection.php:164-177
Il blocco if (empty($this->currentMailbox)) ha indentazione confusa e variabili sovrascritte ($mailboxes a riga 165 viene sovrascritta a riga 167). Potrebbe causare comportamenti imprevedibili.
Fix: Ristrutturare la logica di connessione e selezione della mailbox iniziale.
File: src/Message.php:191-192
La prima chiamata a $client->fetch() con BODY[...] viene immediatamente sovrascritta dalla seconda chiamata con BODY.PEEK[...]. La prima è sprecata.
Fix: Unificare in un'unica chiamata usando la chiave corretta in base al flag FT_PEEK.
File: tests/SearchTest.php:108
Il test ha una chiamata die() che blocca l'esecuzione, impedendo al test di completarsi e di verificare i risultati.
Fix: Rimuovere die() e fare in modo che il test verifichi effettivamente i risultati.
File: src/Acl.php (classe vuota)
Le funzioni imap_getacl(), imap_setacl(), imap_get_quota(), imap_set_quota(), imap_get_quotaroot() non sono implementate.
Fix: Implementare i metodi ACL nella classe Acl.php e aggiungere le corrispondenti funzioni in bootstrap.php.
File: src/Polyfill.php — mailCompose() ritorna sempre false
La funzione Polyfill::mailCompose() non fa nulla e ritorna false.
Fix: Implementare la composizione di messaggi MIME secondo la specifica di imap_mail_compose().
File: src/Message.php — sort() chiama search() e inverte l'array
L'implementazione di sort() non usa il comando IMAP SORT ma simula l'ordinamento lato PHP. Le opzioni di ordinamento non sono gestite correttamente.
Fix: Implementare il comando IMAP SORT tramite ImapClient per ordinamenti server-side reali.
In vari punti del codice il flag FT_PEEK non viene rispettato correttamente. Alcuni percorsi usano BODY.PEEK hardcoded indipendentemente dal flag.
Fix: Verificare e correggere tutte le occorrenze di BODY e BODY.PEEK in Message.php per rispettare FT_PEEK.
Diversi alias imap_*() non sono definiti. Verificare la copertura completa di tutte le 83 funzioni documentate in docs/functions.md e aggiungere quelle mancanti.
File: Tutti i file in src/
Molti metodi mancano di type hints e return type declarations. Aggiungerli per migliorare la robustezza del codice (compatibile con PHP 7.0+).
L'operatore @ è usato estesamente in vari file. Dovrebbe essere sostituito con una gestione esplicita degli errori.
File: Tutti i file in src/
Molti metodi hanno PHPDoc minimale o assente. Aggiungere descrizioni, @param e @return per tutti i metodi pubblici.
File: bootstrap.php (1632 righe)
Il file è molto lungo e ripetitivo. Potrebbe essere suddiviso in file più piccoli (es. functions/, constants.php) per migliorare la manutenibilità.
Non c'è un file di configurazione per il code style. Aggiungere .php-cs-fixer.dist.php o phpcs.xml per garantire uno stile coerente.
File: Nessun file di configurazione PHPStan
phpstan è già una dipendenza dev ma non ha un file di configurazione (phpstan.neon).「
Fix: Creare phpstan.neon e integrarlo nel workflow CI.
File: src/README.md
Referenzia il namespace PhpImap2\Connection che non esiste. Correggere in Javanile\Imap2\Connection.
File: .github/linter.yml
Il workflow linter è attivato solo sul branch test2. Spostare su main.
File: Makefile — target release
Il target esegue git add . && git commit -am "Test CI" && git push che è pericoloso perché committa e spinge tutto automaticamente.
Fix: Rimuovere o proteggere con conferma esplicita.
composer.lock non dovrebbe essere ignorato per una libreria (è buona norma tenerlo tracciato solo per applicazioni), ma va deciso e documentato esplicitamente.
Molti test in CompatibilityTest.php sono placeholder che fanno solo $this->assertEquals(1, 1). Altri test sono commentati. Aggiungere test reali per:
imap_listscan()imap_move()imap_setflagfull()/imap_clearflagfull()imap_sort()(sostituire il placeholder)imap_thread()imap_savebody()imap_fetchheader()- Operazioni con flag
FT_UID/CP_UID
La modalità retrofit (che passa al C-IMAP nativo) ha copertura minima. Aggiungere test che verifichino il corretto fallthrough.
File: tests/fixtures/
Ci sono 40 file .eml ma molti non sono referenziati dai test. Fare pulizia e tenere solo quelli usati.
Configurare GitHub Actions per generare e pubblicare report di code coverage (es. Codecov o Coveralls).
File: composer.json
La libreria richiede PHP >= 7.0, ma molte dipendenze moderne richiedono versioni più recenti. Valutare il supporto per PHP 8.0+ e aggiornare phpunit di conseguenza.
File: tests/legacy/ (3 script)
Sono script manuali non integrati in PHPUnit. Vanno rimossi o convertiti in test veri.
| Priorità | Significato |
|---|---|
| Critica | Blocca l'uso della libreria o causa comportamenti errati/pericolosi |
| Alta | Funzionalità mancanti rispetto all'API imap_*() standard |
| Media | Miglioramenti di qualità, manutenibilità e robustezza del codice |
| Bassa | Miglioramenti opzionali: test, CI, documentazione |