要在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获取邮件的主题,并将其打印出来。

希望这可以帮助到您

golang imap搜索两个指定发信人未读邮件

原文地址: https://www.cveoy.top/t/topic/h0G3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录