[Go] imap收信非并发
待修正
package main import (
"flag"
"fmt"
"io/ioutil"
"log"
"os" "github.com/emersion/go-imap"
"github.com/emersion/go-imap/client"
) var (
server, email, password string
workernum int
imapClient *client.Client
mailDirs []string
mailSumNums uint32
) func main() {
//获取命令行参数
flag.StringVar(&server, "server", "", "imap服务地址(包含端口)")
flag.StringVar(&email, "email", "", "邮箱名")
flag.StringVar(&password, "password", "", "密码")
flag.IntVar(&workernum, "workernum", , "并发数:")
flag.Parse()
if flag.NFlag() < {
flag.PrintDefaults()
os.Exit()
}
if server == "" || email == "" || password == "" || workernum == {
log.Fatal("服务器地址,用户名,密码,参数错误")
}
//连接imap服务
imapClient, err := client.Dial(server)
if err != nil {
log.Fatal(err)
}
//登陆
if err := imapClient.Login(email, password); err != nil {
log.Fatal(err)
}
//创建邮件夹目录
os.Mkdir(email, os.ModePerm)
mailboxes := make(chan *imap.MailboxInfo, )
go func() {
imapClient.List("", "*", mailboxes)
}()
//列取邮件夹
for m := range mailboxes {
mailDirs = append(mailDirs, m.Name)
} for _, mailDir := range mailDirs {
//选中每个邮件夹
mbox, err := imapClient.Select(mailDir, false)
if err != nil {
log.Fatal(err)
}
mailDirNums := mbox.Messages
log.Printf("%s : %d", mailDir, mailDirNums)
fileDir := fmt.Sprintf("%s/%s_%d", email, mailDir, mailDirNums)
//创建邮件夹目录
os.Mkdir(fileDir, os.ModePerm)
mailSumNums += mailDirNums
}
log.Printf("总邮件数 : %d", mailSumNums)
for _, mailDir := range mailDirs {
//选中每个邮件夹
mbox, err := imapClient.Select(mailDir, false)
if err != nil {
log.Fatal(err)
}
//循环该邮件夹中的邮件
seqset := new(imap.SeqSet)
seqset.AddRange(, mbox.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 := fmt.Sprintf("%s/%s_%d/%d.eml", email, mailDir, mbox.Messages, msg.SeqNum)
r := msg.GetBody(section)
if r == nil {
log.Printf("%s-%dServer didn't returned message body", mailDir, msg.SeqNum)
}
if r != nil {
body, err := ioutil.ReadAll(r)
if err != nil {
log.Printf("%s:%d ioutil.ReadAll error", mailDir, msg.SeqNum)
} file6, err := os.OpenFile(mailFile, os.O_RDWR|os.O_CREATE, )
if err != nil {
log.Printf("%s:%d os.OpenFile error %s", mailDir, msg.SeqNum, mailFile)
}
file6.Write(body)
file6.Close()
log.Printf("%s :第 %d ", mailDir, msg.SeqNum)
}
}
}
}
[Go] imap收信非并发的更多相关文章
- PostFix使用dovecot支持POP3/IMAP收信
PostFix只能够收发邮件,以及使用SMTP发送邮件,想要使用POP3/IMAP收信的话必须装其他软件,本文通过配置dovecot让邮件服务器支持POP3/IMAP收信.POP3/IMAP是一种收信 ...
- [Go] 并发imap收信
并发数太大会直接死,这里有时候需要多试几次 package main import ( "flag" "fmt" "io/ioutil" & ...
- Loadrunner:POP3协议录制收信,使用foxmail录制到的脚本为空
以下录制方法使得录制到的脚本为空: (1)打开Virtual User Generator,点击“新建Vuser脚本”,在弹出的向导页面,选择“新建单协议脚本”,选择“POP3”协议,并确定 (2)在 ...
- openERP邮件(发信、收信)
openERP里的邮件处理主要有个2个模块处理 mail -核心 fetchmail -接收邮件 Alias domain和alias name 配置domain alias. Set ...
- NSOperation的start与main,并发与非并发。
http://blog.csdn.net/a2331046/article/details/52294006 在ios4以前,只有非并发的情况下,队列会为operation开启一个线程来执行.如果是并 ...
- NSOperation的并发与非并发
NSoperation也是多线程的一种,NSopertaion有2种形式 (1) 并发执行 并发执行你需要重载如下4个方法 //执行任务主函数,线程运行的入口函数 - (v ...
- Gmail 收信的一些规则
Gmail 收信的一些规则 用 apache+php+MDaemon 调试 mail2www 时,发往gmail的邮件失败, 提示: Our system detected an illegal at ...
- PHP IMAP收QQ邮件,SMTP存入另外QQ邮箱
作用,将qq1收到邮件,用qq2的账号.以qq0的为发件人身份放到qq2的邮箱. 什么样做这样一个功能,一个朋友要求的,她不告诉我为什么,好吧 <?php define('USER','xxx@ ...
- IMAP收邮件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
随机推荐
- 【Gradle】Java Gradle 插件
Java Gradle 插件 如何应用 apply plugin:'java' Java插件约定的项目结构 Project |--build.gradle |--src |--main |--java ...
- nginx——keepalived
nginx--keepalived 1.keepalived高可用基本概述 什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用 ...
- 搭建 Telegraf + InfluxDB + Grafana 监控遇到几个小问题
1:如果同一台服务器上安装有多个MongoDB实例,telegraf.conf 中关于 MongoDB 如何配置?配置数据在[INPUT PLUGINS的[[inputs.mongodb]]]部分. ...
- z390 m.2 接口插上sata 硬盘后,机械硬盘不识别;HDD 硬盘不识别;z390 m.2和 SATA 硬盘安装组合;
今天,在集成z390芯片组的主板上,安装了一块m.2支持 sata协议的ssd时,发现安装上ssd后,之前机械硬盘不识别了:还以为机械硬盘烧了: 在网上查找相关博客可以发现,是M.2 SATA 和 S ...
- git 配置本地用户名称 和 邮件名称
很多次配置git用户名和邮箱了,总是会忘记,然后在网络上搜索,今天进行记录下来,防止遗忘: # 查看用户名和邮箱地址git config user.name git config user.email ...
- Mysql—数据恢复
根据.frm和.ibd文件恢复表结构和数据
- June 16th, 2019. Week 25th, Sunday.
I can fly higher than an eagle, for you are the wind beneath my wings. 我之所以能飞得比鹰还高,是因为有你做我羽翼下的风. You ...
- C++并发编程实战
第1章 你好,C++并发世界 第2章 管理线程 第3章 在线程间数据共享 第4章 同步并发操作 第5章 C++内存模型和原子类型操作 第6章 设计基于锁的并发数据结构 第7章 设计无锁的并发数据结构 ...
- Noip2016Day2T3 愤怒的小鸟
题目链接 problem 平面内有n个点,每次可以确定一条过原点且开口向上的抛物线,将这条抛物线上所有的点都删去.问最少需要删几次可以删掉全部的点. solution n比较小,直接状压一下.因为已经 ...
- electron窗口间通信
以下代码均来自于我开发的开源软件:想学吗 窗口A的渲染进程发消息给主进程 const { clipboard, ipcRenderer, remote } = require('electron'); ...