diff --git a/server.go b/server.go index f4b2e42..20c931a 100644 --- a/server.go +++ b/server.go @@ -6,6 +6,7 @@ import ( "html/template" "log" "net/http" + "strings" ) func main() { @@ -20,11 +21,19 @@ func main() { //输出首页 func index(w http.ResponseWriter, r *http.Request) { auth := getCookie(r, "auth") - if auth == "" { + if !strings.Contains(auth,"|"){ http.Redirect(w, r, "/login", 302) + }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{ + http.Redirect(w, r, "/login", 302) + } } - t, _ := template.ParseFiles("./tmpl/index.html") - t.Execute(w, nil) } //登陆界面 @@ -40,7 +49,7 @@ func login(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("./tmpl/login.html") t.Execute(w, errStr) } else { - auth := fmt.Sprintf("%s:%s:%s", server, email, password) + auth := fmt.Sprintf("%s|%s|%s", server, email, password) cookie := http.Cookie{ Name: "auth", Value: auth, diff --git a/tmpl/index.html b/tmpl/index.html index 653deba..dffbda4 100644 --- a/tmpl/index.html +++ b/tmpl/index.html @@ -1 +1,34 @@ -

hello

\ No newline at end of file + + + + + + + + + 邮箱IMAP-首页 + + + + + + + +
+
+ +
+
.col-md-8
+
+ + + diff --git a/tmpl/login.html b/tmpl/login.html index ffc78b9..2d8bb76 100644 --- a/tmpl/login.html +++ b/tmpl/login.html @@ -81,7 +81,7 @@ - {{if .}}
{{.}}
{{end}} + {{if .}}{{end}}

© 2020

diff --git a/tools/imap.go b/tools/imap.go index a9de7ad..bd075c6 100644 --- a/tools/imap.go +++ b/tools/imap.go @@ -2,22 +2,42 @@ package tools import ( "fmt" + "github.com/emersion/go-imap" "github.com/emersion/go-imap/client" "strconv" "strings" ) - +//验证邮箱密码 func CheckEmailPassword(server string, email string, password string) bool { if !strings.Contains(server, ":") { return false } + var c *client.Client + serverSlice := strings.Split(server, ":") + port, _ := strconv.Atoi(serverSlice[1]) + if port != 993 && port != 143 { + return false + } + + // 不要忘了退出 + //defer c.Logout() + + // 登陆 + c=connect(server,email,password) + if c==nil{ + return false + } + return true +} +//获取连接 +func connect(server string, email string, password string)*client.Client{ var c *client.Client var err error serverSlice := strings.Split(server, ":") uri := serverSlice[0] port, _ := strconv.Atoi(serverSlice[1]) if port != 993 && port != 143 { - return false + return nil } if port == 993 { c, err = client.DialTLS(fmt.Sprintf("%s:%d", uri, port), nil) @@ -25,15 +45,33 @@ func CheckEmailPassword(server string, email string, password string) bool { c, err = client.Dial(fmt.Sprintf("%s:%d", uri, port)) } if err != nil { - return false + return nil } - // 不要忘了退出 - defer c.Logout() - // 登陆 if err := c.Login(email, password); err != nil { - return false + return nil } - return true + return c } +//获取邮件夹 +func GetFolders(server string, email string, password string)[]string{ + var c *client.Client + //defer c.Logout() + c=connect(server,email,password) + if c==nil{ + return nil + } + // 列邮箱 + mailboxes := make(chan *imap.MailboxInfo, 10) + done := make(chan error, 1) + go func() { + done <- c.List("", "*", mailboxes) + }() + // 存储邮件夹 + var folders []string + for m := range mailboxes { + folders=append(folders,m.Name) + } + return folders +} \ No newline at end of file