[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 ...
随机推荐
- 简单sql注入学到的延时盲注新式攻击
0x01 知识点 mysql_pconnect(server,user,pwd,clientflag) mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接. mysql_p ...
- Cesium专栏-地形开挖(附源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- 如何制作gif图片?教你把gif图片缩小100倍大小的妙招!
移动互联网是短视频的时代,5G的到来更是让短视频蓬勃发展,视频的发展让人们看到了动态的机会,图片也需要动起来,图片动起来应该是比较早的,gif图片很早就有,我们常见的动态表情,现在用的比较多的是视频的 ...
- 【二】Gradle中的gradlew
gradle 相当于 gradle wapper,是gradle的包装命令 使用gradlew来构建项目被认为是最佳实践. 使用gradlew有以下好处: 当客户机上没有安装gradle时,可以直接用 ...
- Access denied for user 'root@localhost' (using password:NO)问题的解决
错误详情: 使用pymysql连接数据库mysql,一直无法连接上, conn = pymysql.connect(host='localhost', port=3306, user='root', ...
- oracle表空间相关统计查询
部分转自 https://www.cnblogs.com/xwdreamer/p/3511047.html--查询表空间使用情况SELECT UPPER(F.TABLESPACE_NAME) &quo ...
- mysql中用命令行复制表结构(数据)
mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2; 或 CREATE TABLE 新表 ...
- cookies和sessions组件
目录 cookie与session cookie介绍 session介绍 token django操作cookie 设置cookie 获取cookie 删除cookie 基于cookie实现的登录认证 ...
- HTML5中像网页中保存cookie的实现
if(window.plus)//判断当前的设备是手机 window.localStorage.setItem("key","value");//设置值 win ...
- May 26th, 2019. Week 22nd, Sunday
A real loser is somebody that's so afraid of not winning, they don't even try. 真正的失败者,是那些因为害怕不能成功,就连 ...