Junior — Middle
Van tapasztalata az IMAP protokollal kapcsolatban, amikor postaláda kezelésével foglalkozik?
sobes.tech MI
Válasz az MI-től
Igen, az e-mail fiókokkal való munka során az IMAP (Internet Message Access Protocol) protokollt gyakran használják a szerveren lévő üzenetek elérésére anélkül, hogy letöltenénk őket. Go nyelven több könyvtár is létezik, például a go-imap, amelyek lehetővé teszik az IMAP szerverhez való csatlakozást, hitelesítést, az üzenetek listájának lekérését, azok tartalmának olvasását, üzenetek megjelölését stb.
Egyszerű csatlakozás és üzenetlista lekérése a go-imap segítségével:
package main
import (
"log"
"github.com/emersion/go-imap/client"
"github.com/emersion/go-imap"
)
func main() {
// Csatlakozás az IMAP szerverhez
c, err := client.DialTLS("imap.pelda.com:993", nil)
if err != nil {
log.Fatal(err)
}
defer c.Logout()
// Hitelesítés
if err := c.Login("felhasznalo", "jelszo"); err != nil {
log.Fatal(err)
}
// INBOX kiválasztása
mbox, err := c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
// Az utolsó 10 üzenet lekérése
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("Tárgy:", msg.Envelope.Subject)
}
if err := <-done; err != nil {
log.Fatal(err)
}
}
Ez a példa hatékonyan lehetővé teszi az IMAP protokoll szintjén történő e-mail kezelését.