待修正
package main import ( "flag" fmtio/IoUtillogos" github.com/emersion/go-imapgithub.com/emersion/go-imap/client" ) var ( server,email,password string workernum int imapClient *client.Client mailDirs [] mailSumNums uint32 ) func main() { //获取命令行参数 flag.StringVar(&server,server",1)">"",1)">imap服务地址(包含端口)) flag.StringVar(&email,1)">email邮箱名) flag.StringVar(&password,1)">password密码) flag.Intvar(&workernum,1)">workernum10,1)">并发数:) flag.Parse() if flag.NFlag() < 3 { flag.PrintDefaults() os.Exit(1) } if server == "" || email == "" || password == "" || workernum == 0 { log.Fatal(服务器地址,用户名,密码,参数错误连接imap服务 imapClient,err := client.Dial(server) if err != nil { log.Fatal(err) } 登陆 if err := imapClient.Login(email,password); err !=创建邮件夹目录 os.Mkdir(email,os.ModePerm) mailBoxes := make(chan *imap.MailBoxInfo,1)">20) go func() { imapClient.List(*,mailBoxes) }() 列取邮件夹 for m := range mailBoxes { mailDirs = append(mailDirs,m.Name) } for _,mailDir := range mailDirs { 选中每个邮件夹 mBox,err := imapClient.Select(mailDir,false) nil { log.Fatal(err) } mailDirNums := mBox.Messages log.Printf(%s : %dfmt.Sprintf(%s/%s_%d os.Mkdir(fileDir,os.ModePerm) mailSumNums += mailDirNums } log.Printf(总邮件数 : %d nil { log.Fatal(err) } 循环该邮件夹中的邮件 seqset := new(imap.SeqSet) seqset.AddRange(Box.Messages) section := &imap.BodySectionName{} items := []imap.FetchItem{section.FetchItem()} messages := make(chan *imap.Message,mBox.Messages) go func() { imapClient.Fetch(seqset,items,messages) }() for msg := range messages { mailFile := %s/%s_%d/%d.emlBox.Messages,msg.SeqNum) r := msg.GetBody(section) if r == nil { log.Printf(%s-%dServer didn't returned message bodyif r != nil { body,err := IoUtil.ReadAll(r) nil { log.Printf(%s:%d IoUtil.ReadAll error0766) %s:%d os.OpenFile error %s%s :第 %d版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。