Sobes.tech
Junior — Middle

Vai jums ir pieredze ar IMAP protokola izmantošanu, strādājot ar pasta kastēm?

sobes.tech AI

Atbilde no AI

Jā, strādājot ar pasta kastēm, bieži tiek izmantots IMAP (Internet Message Access Protocol) protokols, lai piekļūtu ziņojumiem serverī bez to lejupielādes. Go valodā ir vairākas bibliotēkas, piemēram, go-imap, kas ļauj savienoties ar IMAP serveri, autentificēties, iegūt ziņojumu sarakstu, lasīt to saturu, marķēt ziņojumus utt.

Piemērs vienkāršai savienošanai un ziņojumu saraksta iegūšanai, izmantojot go-imap:

package main

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

func main() {
    // Savienojums ar IMAP serveri
    c, err := client.DialTLS("imap.piemers.com:993", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer c.Logout()

    // Autentifikācija
    if err := c.Login("lietotajs", "parole"); err != nil {
        log.Fatal(err)
    }

    // Izvēlēties INBOX
    mbox, err := c.Select("INBOX", false)
    if err != nil {
        log.Fatal(err)
    }

    // Iegūt pēdējos 10 ziņojumus
    from := uint32(1)
    to := mbox.Messages
    if mbox.Messages > 10 {
        from = mbox.Messages - 9
    }

    seqset := new(imap.SeqSet)
    seqset.AddRange(from, to)

    ziņojumi := make(chan *imap.Message, 10)
    pabeigšana := make(chan error, 1)
    go func() {
        pabeigšana <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, ziņojumi)
    }()

    for ziņojums := range ziņojumi {
        log.Println("Temats:", ziņojums.Envelope.Subject)
    }

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

Šis piemērs ļauj efektīvi strādāt ar e-pastu IMAP protokola līmenī.