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 @@
- 邮件夹
- {{ range $key, $value := .}}
+ {{ range $key, $value := .Folders}}
-
{{$key}}
- {{$value}}
+ {{if ne $value 0 }}{{$value}}{{end}}
{{end}}
@@ -33,9 +33,9 @@
- 邮件列表
- {{ range $key, $value := .}}
+ {{ range $key, $value := .Mails}}
-
- {{$key}}
+ {{$value}}
{{end}}
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