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.