Sobes.tech
Junior — Middle

Pochta qutilari bilan ishlashda IMAP protokoli bilan tajribangiz bormi?

sobes.tech AI

AIdan javob

Ha, pochta qutilari bilan ishlashda, IMAP (Internet Message Access Protocol) protokoli, odatda, serverdagi xabarlarni ularni yuklab olmadan kirish uchun ishlatiladi. Go tilida, masalan, go-imap kabi bir nechta kutubxonalar mavjud bo‘lib, ular IMAP serveriga ulanish, autentifikatsiya qilish, xabarlar ro‘yxatini olish, ularni o‘qish, xabarlarni belgilash va boshqalar uchun imkon beradi.

go-imap yordamida oddiy ulanish va xabarlar ro‘yxatini olish misoli:

package main

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

func main() {
    // IMAP serveriga ulanish
    c, err := client.DialTLS("imap.misol.com:993", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer c.Logout()

    // Autentifikatsiya
    if err := c.Login("foydalanuvchi", "parol"); err != nil {
        log.Fatal(err)
    }

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

    // So‘nggi 10 ta xabarni olish
    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("Mavzu:", msg.Envelope.Subject)
    }

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

Ushbu misol IMAP protokoli darajasida pochta bilan samarali ishlash imkonini beradi.