Sobes.tech
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.