From 2c1fae79b7451eaa2c6126ab64e91e697120a5ba Mon Sep 17 00:00:00 2001 From: taoshihan1991 <630892807@qq.com> Date: Fri, 29 May 2020 19:54:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=B7=AF=E7=94=B1=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=88=B0=E6=8E=A7=E5=88=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/folder.go | 138 +++++++++++++++++++++++++++++++++ controller/index.go | 24 ++++++ controller/login.go | 37 +++++++++ server.go | 162 ++------------------------------------- static/html/nav.html | 2 +- static/html/setting.html | 17 ++-- static/html/write.html | 23 ++++-- 7 files changed, 236 insertions(+), 167 deletions(-) create mode 100644 controller/folder.go create mode 100644 controller/index.go create mode 100644 controller/login.go diff --git a/controller/folder.go b/controller/folder.go new file mode 100644 index 0000000..8e40d7b --- /dev/null +++ b/controller/folder.go @@ -0,0 +1,138 @@ +package controller + +import ( + "encoding/json" + "github.com/taoshihan1991/imaptool/tmpl" + "github.com/taoshihan1991/imaptool/tools" + "io/ioutil" + "net/http" + "strconv" + "sync" +) +const PageSize = 20 +//输出列表 +func ActionFolder(w http.ResponseWriter, r *http.Request){ + fid:=tools.GetUrlArg(r,"fid") + currentPage, _ :=strconv.Atoi(tools.GetUrlArg(r,"page")) + if fid == "" { + fid = "INBOX" + } + if currentPage == 0 { + currentPage = 1 + } + render := new(tools.IndexData) + render.CurrentPage = currentPage + render.Fid = fid + tmpl.RenderList(w, render) +} +//获取邮件夹接口 +func FolderDir(w http.ResponseWriter, r *http.Request){ + fid:=tools.GetUrlArg(r,"fid") + + if fid == "" { + fid = "INBOX" + } + + mailServer := tools.GetMailServerFromCookie(r) + w.Header().Set("content-type", "text/json;charset=utf-8;") + + if mailServer == nil { + msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) + w.Write(msg) + return + } + result := make(map[string]interface{}) + folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid) + result["folders"] = folders + result["total"] = folders[fid] + result["fid"] = fid + msg, _ := json.Marshal(tools.JsonFolders{ + JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"}, + Result: result, + }) + w.Write(msg) +} +//邮件夹接口 +func FoldersList(w http.ResponseWriter, r *http.Request) { + fid:=tools.GetUrlArg(r,"fid") + currentPage, _ :=strconv.Atoi(tools.GetUrlArg(r,"page")) + + if fid == "" { + fid = "INBOX" + } + if currentPage == 0 { + currentPage = 1 + } + + mailServer := tools.GetMailServerFromCookie(r) + w.Header().Set("content-type", "text/json;charset=utf-8;") + + if mailServer == nil { + msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) + w.Write(msg) + return + } + var wg sync.WaitGroup + wg.Add(2) + result := make(map[string]interface{}) + go func() { + defer wg.Done() + folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid) + result["folders"] = folders + result["total"] = folders[fid] + }() + go func() { + defer wg.Done() + mails := tools.GetFolderMail(mailServer.Server, mailServer.Email, mailServer.Password, fid, currentPage, PageSize) + result["mails"] = mails + }() + wg.Wait() + result["pagesize"] = PageSize + result["fid"] = fid + + msg, _ := json.Marshal(tools.JsonFolders{ + JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"}, + Result: result, + }) + w.Write(msg) +} +//发送邮件接口 +func FolderSend(w http.ResponseWriter, r *http.Request){ + w.Header().Set("content-type", "text/json;charset=utf-8;") + mailServer := tools.GetMailServerFromCookie(r) + + if mailServer == nil { + msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) + w.Write(msg) + return + } + + bodyBytes,err:=ioutil.ReadAll(r.Body) + if err!=nil{ + msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "操作失败,"+err.Error()}) + w.Write(msg) + return + } + var sendData tools.SmtpBody + err = json.Unmarshal(bodyBytes, &sendData) + if err!=nil{ + msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "操作失败,"+err.Error()}) + w.Write(msg) + return + } + + smtpServer:=sendData.Smtp + smtpFrom:=mailServer.Email + smtpTo:=sendData.To + smtpBody:=sendData.Body + smtpPass:=mailServer.Password + smtpSubject:=sendData.Subject + err=tools.Send(smtpServer,smtpFrom,smtpPass,smtpTo,smtpSubject,smtpBody) + if err!=nil{ + msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: err.Error()}) + w.Write(msg) + return + } + msg, _ := json.Marshal(tools.JsonResult{Code: 200, Msg: "发送成功!"}) + w.Write(msg) +} diff --git a/controller/index.go b/controller/index.go new file mode 100644 index 0000000..84b4655 --- /dev/null +++ b/controller/index.go @@ -0,0 +1,24 @@ +package controller + +import ( + "github.com/taoshihan1991/imaptool/tools" + "net/http" +) +//首页跳转 +func ActionIndex(w http.ResponseWriter, r *http.Request){ + if r.URL.RequestURI() == "/favicon.ico" { + return + } + + mailServer := tools.GetMailServerFromCookie(r) + if mailServer == nil { + http.Redirect(w, r, "/login", 302) + } else { + res := tools.CheckEmailPassword(mailServer.Server, mailServer.Email, mailServer.Password) + if res { + http.Redirect(w, r, "/main", 302) + } else { + http.Redirect(w, r, "/login", 302) + } + } +} diff --git a/controller/login.go b/controller/login.go new file mode 100644 index 0000000..52c7654 --- /dev/null +++ b/controller/login.go @@ -0,0 +1,37 @@ +package controller + +import ( + "encoding/json" + "fmt" + "github.com/taoshihan1991/imaptool/tools" + "html/template" + "net/http" +) +//登陆界面 +func ActionLogin(w http.ResponseWriter, r *http.Request){ + html := tools.FileGetContent("html/login.html") + t, _ := template.New("login").Parse(html) + t.Execute(w, nil) +} +//验证接口 +func LoginCheck(w http.ResponseWriter, r *http.Request) { + email := r.PostFormValue("email") + server := r.PostFormValue("server") + password := r.PostFormValue("password") + msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) + + w.Header().Set("content-type", "text/json;charset=utf-8;") + if email != "" && server != "" && password != "" { + res := tools.CheckEmailPassword(server, email, password) + if res { + msg, _ = json.Marshal(tools.JsonResult{Code: 200, Msg: "验证成功,正在跳转..."}) + auth := fmt.Sprintf("%s|%s|%s", server, email, password) + tools.SetCookie("auth", auth, &w) + w.Write(msg) + } else { + w.Write(msg) + } + } else { + w.Write(msg) + } +} diff --git a/server.go b/server.go index f24a301..e639322 100644 --- a/server.go +++ b/server.go @@ -2,31 +2,30 @@ package main import ( "encoding/json" - "fmt" "github.com/taoshihan1991/imaptool/controller" "github.com/taoshihan1991/imaptool/tmpl" "github.com/taoshihan1991/imaptool/tools" - "io/ioutil" "log" "net/http" "strconv" "sync" ) -const PageSize = 20 func main() { log.Println("listen on 8080...\r\ngo:http://127.0.0.1:8080") //根路径 - http.HandleFunc("/", index) + http.HandleFunc("/", controller.ActionIndex) //邮件夹 - http.HandleFunc("/list", list) + http.HandleFunc("/list", controller.ActionFolder) //登陆界面 - http.HandleFunc("/login", login) + http.HandleFunc("/login", controller.ActionLogin) //验证接口 - http.HandleFunc("/check", check) + http.HandleFunc("/check", controller.LoginCheck) //邮件夹接口 - http.HandleFunc("/folders", folders) + http.HandleFunc("/folders", controller.FoldersList) + //新邮件夹接口 + http.HandleFunc("/folder_dirs", controller.FolderDir) //邮件接口 http.HandleFunc("/mail", mail) //详情界面 @@ -38,46 +37,11 @@ func main() { //设置界面 http.HandleFunc("/setting", controller.ActionSetting) //发送邮件接口 - http.HandleFunc("/send", send) + http.HandleFunc("/send", controller.FolderSend) //监听端口 http.ListenAndServe(":8080", nil) } -//首页跳转 -func index(w http.ResponseWriter, r *http.Request) { - if r.URL.RequestURI() == "/favicon.ico" { - return - } - - mailServer := tools.GetMailServerFromCookie(r) - if mailServer == nil { - http.Redirect(w, r, "/login", 302) - } else { - res := tools.CheckEmailPassword(mailServer.Server, mailServer.Email, mailServer.Password) - if res { - http.Redirect(w, r, "/list", 302) - } else { - http.Redirect(w, r, "/login", 302) - } - } -} - -//输出列表 -func list(w http.ResponseWriter, r *http.Request) { - fid:=tools.GetUrlArg(r,"fid") - currentPage, _ :=strconv.Atoi(tools.GetUrlArg(r,"page")) - if fid == "" { - fid = "INBOX" - } - if currentPage == 0 { - currentPage = 1 - } - render := new(tools.IndexData) - render.CurrentPage = currentPage - render.Fid = fid - tmpl.RenderList(w, render) -} - //详情界面 func view(w http.ResponseWriter, r *http.Request) { fid:=tools.GetUrlArg(r,"fid") @@ -109,122 +73,12 @@ func view(w http.ResponseWriter, r *http.Request) { tmpl.RenderView(w, render) } -//登陆界面 -func login(w http.ResponseWriter, r *http.Request) { - tmpl.RenderLogin(w, nil) -} //写信界面 func write(w http.ResponseWriter, r *http.Request) { render:=new(tmpl.CommonHtml) tmpl.RenderWrite(w, render) } -//验证接口 -func check(w http.ResponseWriter, r *http.Request) { - email := r.PostFormValue("email") - server := r.PostFormValue("server") - password := r.PostFormValue("password") - msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) - - w.Header().Set("content-type", "text/json;charset=utf-8;") - if email != "" && server != "" && password != "" { - res := tools.CheckEmailPassword(server, email, password) - if res { - msg, _ = json.Marshal(tools.JsonResult{Code: 200, Msg: "验证成功,正在跳转..."}) - auth := fmt.Sprintf("%s|%s|%s", server, email, password) - tools.SetCookie("auth", auth, &w) - w.Write(msg) - } else { - w.Write(msg) - } - } else { - w.Write(msg) - } -} -//发送邮件接口 -func send(w http.ResponseWriter, r *http.Request){ - w.Header().Set("content-type", "text/json;charset=utf-8;") - mailServer := tools.GetMailServerFromCookie(r) - - if mailServer == nil { - msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) - w.Write(msg) - return - } - - bodyBytes,err:=ioutil.ReadAll(r.Body) - if err!=nil{ - msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "操作失败,"+err.Error()}) - w.Write(msg) - return - } - var sendData tools.SmtpBody - err = json.Unmarshal(bodyBytes, &sendData) - if err!=nil{ - msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "操作失败,"+err.Error()}) - w.Write(msg) - return - } - - smtpServer:=sendData.Smtp - smtpFrom:=sendData.From - smtpTo:=sendData.To - smtpBody:=sendData.Body - smtpPass:=sendData.Password - smtpSubject:=sendData.Subject - err=tools.Send(smtpServer,smtpFrom,smtpPass,smtpTo,smtpSubject,smtpBody) - if err!=nil{ - msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: err.Error()}) - w.Write(msg) - return - } - msg, _ := json.Marshal(tools.JsonResult{Code: 200, Msg: "发送成功!"}) - w.Write(msg) -} -//邮件夹接口 -func folders(w http.ResponseWriter, r *http.Request) { - fid:=tools.GetUrlArg(r,"fid") - currentPage, _ :=strconv.Atoi(tools.GetUrlArg(r,"page")) - - if fid == "" { - fid = "INBOX" - } - if currentPage == 0 { - currentPage = 1 - } - - mailServer := tools.GetMailServerFromCookie(r) - w.Header().Set("content-type", "text/json;charset=utf-8;") - - if mailServer == nil { - msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) - w.Write(msg) - return - } - var wg sync.WaitGroup - wg.Add(2) - result := make(map[string]interface{}) - go func() { - defer wg.Done() - folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid) - result["folders"] = folders - result["total"] = folders[fid] - }() - go func() { - defer wg.Done() - mails := tools.GetFolderMail(mailServer.Server, mailServer.Email, mailServer.Password, fid, currentPage, PageSize) - result["mails"] = mails - }() - wg.Wait() - result["pagesize"] = PageSize - result["fid"] = fid - - msg, _ := json.Marshal(tools.JsonFolders{ - JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"}, - Result: result, - }) - w.Write(msg) -} //邮件接口 func mail(w http.ResponseWriter, r *http.Request) { diff --git a/static/html/nav.html b/static/html/nav.html index 4f7ba87..8e91516 100644 --- a/static/html/nav.html +++ b/static/html/nav.html @@ -1,5 +1,5 @@ 收信 diff --git a/static/html/setting.html b/static/html/setting.html index a287cc7..156202a 100644 --- a/static/html/setting.html +++ b/static/html/setting.html @@ -4,12 +4,17 @@