Junior — Middle
Ar turite patirties dirbant su IMAP protokolu el. pašto dėžutėmis?
sobes.tech AI
Atsakymas iš AI
Taip, dirbant su pašto dėžutėmis, dažnai naudojamas IMAP (Internet Message Access Protocol) protokolas, leidžiantis pasiekti laiškus serveryje be jų atsisiuntimo. Go kalboje yra keletas bibliotekų, pavyzdžiui, go-imap, kurios leidžia jungtis prie IMAP serverio, autentifikuotis, gauti laiškų sąrašą, skaityti jų turinį, žymėti laiškus ir kt.
Pavyzdys paprasto prisijungimo ir laiškų sąrašo gavimo naudojant go-imap:
package main
import (
"log"
"github.com/emersion/go-imap/client"
"github.com/emersion/go-imap"
)
func main() {
// Prisijungti prie IMAP serverio
c, err := client.DialTLS("imap.pavyzdys.com:993", nil)
if err != nil {
log.Fatal(err)
}
defer c.Logout()
// Autentifikacija
if err := c.Login("vartotojas", "slaptazodis"); err != nil {
log.Fatal(err)
}
// Pasirinkti INBOX
mbox, err := c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
// Gauti paskutinius 10 laiškų
from := uint32(1)
to := mbox.Messages
if mbox.Messages > 10 {
from = mbox.Messages - 9
}
seqset := new(imap.SeqSet)
seqset.AddRange(from, to)
žinutės := make(chan *imap.Message, 10)
pabaiga := make(chan error, 1)
go func() {
pabaiga <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, žinutės)
}()
for žinutė := range žinutės {
log.Println("Tema:", žinutė.Envelope.Subject)
}
if err := <-pabaiga; err != nil {
log.Fatal(err)
}
}
Šis pavyzdys leidžia efektyviai dirbti su laiškais IMAP protokolo lygyje.