微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[Go] imap收信非并发

待修正

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 举报,一经查实,本站将立刻删除。

相关推荐