Junior — Middle
Оё шумо таҷрибаи кор бо протоколи IMAP дар вақти кор бо қуттиҳои почта доред?
sobes.tech AI
Ҷавоб аз AI
Баъзе, коркарди қуттиҳои почта, протоколи IMAP (Internet Message Access Protocol) одатан барои дастрасӣ ба паёмҳо дар сервер бидуни зарурати боргирӣ истифода мешавад. Дар Go, чанд китобхонаҳо ҳастанд, масалан, go-imap, ки имкон медиҳанд ба сервери IMAP пайваст шудан, аутентификатсия кардан, рӯйхати паёмҳоро гирифтан, мазмуни онҳоро хондан, паёмҳоро ишора кардан ва ғайра.
Масалан, пайвастшавӣ ва гирифтани рӯйхати паёмҳо бо истифода аз go-imap:
package main
import (
"log"
"github.com/emersion/go-imap/client"
"github.com/emersion/go-imap"
)
func main() {
// Пайваст шудан ба сервери IMAP
c, err := client.DialTLS("imap.nамуна.com:993", nil)
if err != nil {
log.Fatal(err)
}
defer c.Logout()
// Аутентификатсия
if err := c.Login("корбар", "калид"); err != nil {
log.Fatal(err)
}
// Интихоб кардани папкаи INBOX
mbox, err := c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
// Гирифтани 10 паёми охирин
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("Мавзӯъ:", msg.Envelope.Subject)
}
if err := <-done; err != nil {
log.Fatal(err)
}
}
Ин намуна имкон медиҳад, ки бо почта дар сатҳи протоколи IMAP самаранок кор кунед.