Sobes.tech
Junior — Middle

Da li imate iskustva sa IMAP protokolom prilikom rada sa poštanskim sanducima?

sobes.tech АИ

Одговор од АИ

Da, prilikom rada sa poštanskim sandučetom, često se koristi IMAP (Internet Message Access Protocol) protokol za pristup porukama na serveru bez potrebe za preuzimanjem. U Go jeziku, postoji nekoliko biblioteka, na primer go-imap, koje omogućavaju povezivanje sa IMAP serverom, autentifikaciju, dobijanje liste poruka, čitanje sadržaja, označavanje poruka itd.

Primer jednostavnog povezivanja i dobijanja liste poruka koristeći go-imap:

package main

import (
    "log"
    "github.com/emersion/go-imap/client"
    "github.com/emersion/go-imap"
)

func main() {
    // Povezivanje sa IMAP serverom
    c, err := client.DialTLS("imap.primer.com:993", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer c.Logout()

    // Autentifikacija
    if err := c.Login("korisnik", "lozinka"); err != nil {
        log.Fatal(err)
    }

    // Izbor INBOX foldera
    mbox, err := c.Select("INBOX", false)
    if err != nil {
        log.Fatal(err)
    }

    // Dobijanje poslednjih 10 poruka
    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("Subject:", msg.Envelope.Subject)
    }

    if err := <-done; err != nil {
        log.Fatal(err)
    }
}

Ovaj primer omogućava efikasno rad sa poštom na nivou IMAP protokola.