golang imap搜索两个指定发信人未读邮件
要在Golang中搜索两个指定发信人的未读邮件,您可以使用IMAP协议的标准搜索功能。下面是一个示例代码,演示如何使用go-imap库搜索两个发信人的未读邮件:
package main
import (
"fmt"
"log"
"strings"
"github.com/emersion/go-imap"
"github.com/emersion/go-imap/client"
)
func main() {
// 连接到IMAP服务器
c, err := client.DialTLS("mail.example.com:993", nil)
if err != nil {
log.Fatal(err)
}
defer c.Logout()
// 登录
if err := c.Login("username", "password"); err != nil {
log.Fatal(err)
}
// 选择邮箱
_, err = c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
// 构建搜索条件
criteria := imap.NewSearchCriteria()
criteria.WithoutFlags = []string{imap.SeenFlag} // 未读邮件
criteria.Header.Add("From", "sender1@example.com") // 第一个发信人
criteria.Header.Add("From", "sender2@example.com") // 第二个发信人
// 执行搜索
uids, err := c.Search(criteria)
if err != nil {
log.Fatal(err)
}
// 获取邮件详情
seqset := new(imap.SeqSet)
seqset.AddNum(uids...)
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 {
fmt.Println("Subject:", msg.Envelope.Subject)
}
if err := <-done; err != nil {
log.Fatal(err)
}
}
请注意,您需要将mail.example.com:993替换为您的IMAP服务器地址,username和password替换为您的登录凭据。同时,将sender1@example.com和sender2@example.com替换为您要搜索的两个发信人的邮件地址。
这段代码首先连接到IMAP服务器,然后进行身份验证和邮箱选择。然后,它构建了一个搜索条件,设置了未读邮件和两个发信人的过滤器。接下来,它执行搜索并获取符合条件的邮件的UID。最后,它使用UID获取邮件的主题,并将其打印出来。
希望这可以帮助到您
原文地址: https://www.cveoy.top/t/topic/h0G3 著作权归作者所有。请勿转载和采集!