gpt4 book ai didi

go - emersion/go-imap - 将消息标记为可见

转载 作者:数据小太阳 更新时间:2023-10-29 03:23:24 26 4
gpt4 key购买 nike

我正在尝试使用此 IMAP 协议(protocol)实现将消息标记为可见,但它没有按预期工作。

我有一个打印看不见的消息的功能,我的意图是到最后,它将每条消息标记为已看到。

package main

import (
"emailmonitor/util"
"fmt"
)

func main() {

serverGmail := util.NewServerGmail()

serverGmail.Connect()
serverGmail.Login()
serverGmail.ListUnseenMessages()

}

//-----------------------------------------

package util

import (
"io/ioutil"
"log"
"net/mail"
"net/smtp"

imap "github.com/emersion/go-imap"
"github.com/emersion/go-imap/client"
)

type ServerGmail struct {
user string
pass string
erro string
cliente *client.Client
}

func NewServerGmail() *ServerGmail {
serverGmail := &ServerGmail{}
serverGmail.user = "xxxxxx@gmail.com"
serverGmail.pass = "xxxxx"
serverGmail.erro = ""

return serverGmail
}

func (serverGmail *ServerGmail) Connect() {
// Connect to server
cliente, erro := client.DialTLS("smtp.gmail.com:993", nil)
if erro != nil {
serverGmail.erro = erro.Error()
}
log.Println("Connected")

serverGmail.cliente = cliente

}

func (serverGmail *ServerGmail) Login() {
// Login
if erro := serverGmail.cliente.Login(serverGmail.user, serverGmail.pass); erro != nil {
serverGmail.erro = erro.Error()
}
log.Println("Logged")

}

func (serverGmail *ServerGmail) setLabelBox(label string) *imap.MailboxStatus {
mailbox, erro := serverGmail.cliente.Select(label, true)
if erro != nil {
serverGmail.erro = erro.Error()
}
return mailbox
}

func (serverGmail *ServerGmail) ListUnseenMessages() {
// set mailbox to INBOX
serverGmail.setLabelBox("INBOX")
// criteria to search for unseen messages
criteria := imap.NewSearchCriteria()
criteria.WithoutFlags = []string{"\\Seen"}

uids, err := serverGmail.cliente.UidSearch(criteria)
if err != nil {
log.Println(err)
}
seqSet := new(imap.SeqSet)
seqSet.AddNum(uids...)
section := &imap.BodySectionName{}
items := []imap.FetchItem{imap.FetchEnvelope, imap.FetchFlags, imap.FetchInternalDate, section.FetchItem()}
messages := make(chan *imap.Message)
go func() {
if err := serverGmail.cliente.UidFetch(seqSet, items, messages); err != nil {
log.Fatal(err)
}
}()

for message := range messages {

log.Println(message.Uid)

if message == nil {
log.Fatal("Server didn't returned message")
}

r := message.GetBody(section)
if r == nil {
log.Fatal("Server didn't returned message body")
}

// Create a new mail reader
mr, err := mail.CreateReader(r)
if err != nil {
log.Fatal(err)
}

// Print some info about the message
header := mr.Header

if date, err := header.Date(); err == nil {
log.Println("Date:", date)
}
if from, err := header.AddressList("From"); err == nil {
log.Println("From:", from)
}
if to, err := header.AddressList("To"); err == nil {
log.Println("To:", to)
}
if subject, err := header.Subject(); err == nil {
log.Println("Subject:", subject)
}

// MARK "SEEN" ------- STARTS HERE ---------

seqSet.Clear()
seqSet.AddNum(message.Uid)
item := imap.FormatFlagsOp(imap.AddFlags, true)
flags := []interface{}{imap.SeenFlag}
erro := serverGmail.cliente.UidStore(seqSet, item, flags, nil)
if erro != nil {
panic("error!")
}

}

}

来自文档的链接:https://godoc.org/github.com/emersion/go-imap/client#Client.UidStore尝试做一些类似于商店示例的事情。

如何解决?

最佳答案

通过将 true 更改为 false 来修改以下行

邮箱,错误 := serverGmail.cliente.Select(label, true)

完成此操作后,当获取消息时(使用 UidFetch),它将自动标记为“已读”

关于go - emersion/go-imap - 将消息标记为可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com