Junior — Middle
Hai esperienza con il protocollo IMAP nella gestione delle caselle di posta?
sobes.tech AI
Risposta dell'AI
Sì, lavorando con le caselle di posta, il protocollo IMAP (Internet Message Access Protocol) viene spesso utilizzato per accedere ai messaggi sul server senza doverli scaricare. In Go, ci sono diverse librerie, ad esempio go-imap, che consentono di connettersi al server IMAP, autenticarsi, ottenere la lista delle email, leggerne il contenuto, contrassegnare le email, ecc.
Esempio di connessione semplice e recupero della lista delle email usando go-imap:
package main
import (
"log"
"github.com/emersion/go-imap/client"
"github.com/emersion/go-imap"
)
func main() {
// Connessione al server IMAP
c, err := client.DialTLS("imap.esempio.com:993", nil)
if err != nil {
log.Fatal(err)
}
defer c.Logout()
// Autenticazione
if err := c.Login("utente", "password"); err != nil {
log.Fatal(err)
}
// Selezione della casella INBOX
mbox, err := c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
// Recupero delle ultime 10 email
from := uint32(1)
to := mbox.Messages
if mbox.Messages > 10 {
from = mbox.Messages - 9
}
seqset := new(imap.SeqSet)
seqset.AddRange(from, to)
messages := make(chan *imap.Message, 10)
done := make(chan error, 1)
go func() {
done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, messages)
}()
for msg := range messages {
log.Println("Oggetto:", msg.Envelope.Subject)
}
if err := <-done; err != nil {
log.Fatal(err)
}
}
Questo esempio permette di lavorare in modo efficiente con le email a livello del protocollo IMAP.