diff --git a/server.go b/server.go index 20c931a..e95a417 100644 --- a/server.go +++ b/server.go @@ -9,33 +9,56 @@ import ( "strings" ) +type IndexData struct { + Folders map[string]int + Mails interface{} +} + func main() { log.Println("listen on 8080...") http.HandleFunc("/", index) + http.HandleFunc("/list", list) //登陆界面 http.HandleFunc("/login", login) //监听端口 http.ListenAndServe(":8080", nil) } -//输出首页 +//首页跳转 func index(w http.ResponseWriter, r *http.Request) { + if r.URL.RequestURI()=="/favicon.ico"{ + return + } + auth := getCookie(r, "auth") - if !strings.Contains(auth,"|"){ + if !strings.Contains(auth, "|") { http.Redirect(w, r, "/login", 302) - }else { + } else { authStrings := strings.Split(auth, "|") res := tools.CheckEmailPassword(authStrings[0], authStrings[1], authStrings[2]) - if res{ - folders := tools.GetFolders(authStrings[0], authStrings[1], authStrings[2]) - t, _ := template.ParseFiles("./tmpl/index.html") - t.Execute(w, folders) - }else{ + if res { + http.Redirect(w, r, "/list", 302) + } else { http.Redirect(w, r, "/login", 302) } } } +//输出列表 +func list(w http.ResponseWriter, r *http.Request) { + + auth := getCookie(r, "auth") + authStrings := strings.Split(auth, "|") + + render := new(IndexData) + folders := tools.GetFolders(authStrings[0], authStrings[1], authStrings[2]) + render.Folders = folders + mails := tools.GetFolderMail(authStrings[0], authStrings[1], authStrings[2], "INBOX", 10) + render.Mails = mails + t, _ := template.ParseFiles("./tmpl/index.html") + t.Execute(w, render) +} + //登陆界面 func login(w http.ResponseWriter, r *http.Request) { email := r.PostFormValue("email") diff --git a/tmpl/index.html b/tmpl/index.html index 3fb2396..c084bd2 100644 --- a/tmpl/index.html +++ b/tmpl/index.html @@ -22,10 +22,10 @@
@@ -33,9 +33,9 @@
diff --git a/tools/imap.go b/tools/imap.go index 10abb59..18cc5a4 100644 --- a/tools/imap.go +++ b/tools/imap.go @@ -7,7 +7,6 @@ import ( "log" "strconv" "strings" - "sync" ) //验证邮箱密码 func CheckEmailPassword(server string, email string, password string) bool { @@ -73,21 +72,45 @@ func GetFolders(server string, email string, password string)map[string]int{ // 存储邮件夹 var folders =make(map[string]int) for m := range mailboxes { - folders[m.Name]=1 + folders[m.Name]=0 } - var wg sync.WaitGroup - var k string - for k,_=range folders{ - //wg.Add(1) - //go func(k string) { - mbox, _ := c.Select(k, false) - if mbox!=nil{ - log.Println(k,mbox.Messages) - folders[k]=int(mbox.Messages) + for m,_ := range folders { + if m=="INBOX" { + mbox, _ := c.Select(m, true) + if mbox != nil { + folders[m] = int(mbox.Messages) } - //wg.Done() - //}(k) + break + } } - wg.Wait() + log.Println(folders) return folders +} +//获取邮件夹邮件 +func GetFolderMail(server string, email string, password string,folder string,pagesize int)[]string{ + var c *client.Client + //defer c.Logout() + c=connect(server,email,password) + if c==nil{ + return nil + } + + mbox, _ := c.Select(folder, true) + to := mbox.Messages + from := to-uint32(pagesize) + + seqset := new(imap.SeqSet) + seqset.AddRange(from, to) + + messages := make(chan *imap.Message, pagesize) + done := make(chan error, 1) + go func() { + done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, messages) + }() + log.Println(111) + var res []string + for msg := range messages { + res=append(res,msg.Envelope.Subject) + } + return res } \ No newline at end of file