Sobes.tech
Junior — Middle

Ai experiență cu protocolul IMAP atunci când lucrezi cu căsuțe poștale?

sobes.tech AI

Răspuns de la AI

Da, lucrând cu căsuțe poștale, se utilizează frecvent protocolul IMAP (Internet Message Access Protocol) pentru a accesa mesajele de pe server fără a fi nevoie să le descărcați. În Go, există mai multe biblioteci, de exemplu, go-imap, care permit conectarea la serverul IMAP, autentificarea, obținerea listei de mesaje, citirea conținutului, marcarea mesajelor etc.

Exemplu de conectare simplă și de obținere a listei de mesaje folosind go-imap:

package main

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

func main() {
    // Conectare la serverul IMAP
    c, err := client.DialTLS("imap.exemplu.com:993", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer c.Logout()

    // Autentificare
    if err := c.Login("utilizator", "parola"); err != nil {
        log.Fatal(err)
    }

    // Selectarea căsuței INBOX
    mbox, err := c.Select("INBOX", false)
    if err != nil {
        log.Fatal(err)
    }

    // Obținerea ultimelor 10 mesaje
    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("Subiect:", msg.Envelope.Subject)
    }

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

Acest exemplu permite lucrul eficient cu e-mailurile la nivelul protocolului IMAP.