更新完成全部ajax获取数据

pull/30/head
taoshihan1991 4 years ago
parent 42500db064
commit a450c67b96

@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"github.com/taoshihan1991/imaptool/tmpl" "github.com/taoshihan1991/imaptool/tmpl"
"github.com/taoshihan1991/imaptool/tools" "github.com/taoshihan1991/imaptool/tools"
"html/template"
"log" "log"
"net/http" "net/http"
"strconv" "strconv"
@ -40,8 +39,8 @@ func index(w http.ResponseWriter, r *http.Request) {
return return
} }
mailServer:=tools.GetMailServerFromCookie(r) mailServer := tools.GetMailServerFromCookie(r)
if mailServer==nil { if mailServer == nil {
http.Redirect(w, r, "/login", 302) http.Redirect(w, r, "/login", 302)
} else { } else {
res := tools.CheckEmailPassword(mailServer.Server, mailServer.Email, mailServer.Password) res := tools.CheckEmailPassword(mailServer.Server, mailServer.Email, mailServer.Password)
@ -55,7 +54,25 @@ func index(w http.ResponseWriter, r *http.Request) {
//输出列表 //输出列表
func list(w http.ResponseWriter, r *http.Request) { func list(w http.ResponseWriter, r *http.Request) {
tmpl.RenderList(w, nil) values := r.URL.Query()
fid := ""
currentPage := 0
if len(values["fid"]) != 0 {
fid = values["fid"][0]
}
if len(values["page"]) != 0 {
currentPage, _ = strconv.Atoi(values["page"][0])
}
if fid == "" {
fid = "INBOX"
}
if currentPage == 0 {
currentPage = 1
}
render := new(tools.IndexData)
render.CurrentPage = currentPage
render.Fid = fid
tmpl.RenderList(w, render)
} }
//详情界面 //详情界面
@ -74,28 +91,30 @@ func view(w http.ResponseWriter, r *http.Request) {
} else { } else {
id = 0 id = 0
} }
//
mailServer:=tools.GetMailServerFromCookie(r) //mailServer:=tools.GetMailServerFromCookie(r)
var wg sync.WaitGroup //var wg sync.WaitGroup
var render = new(tools.ViewData) var render = new(tools.ViewData)
wg.Add(1) render.Fid = fid
go func() { render.Id = id
defer wg.Done() //wg.Add(1)
folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid) //go func() {
render.Folders = folders // defer wg.Done()
render.Fid = fid // folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid)
}() // render.Folders = folders
wg.Add(1) // render.Fid = fid
go func() { //}()
defer wg.Done() //wg.Add(1)
mail := tools.GetMessage(mailServer.Server, mailServer.Email, mailServer.Password, fid, id) //go func() {
render.From = mail.From // defer wg.Done()
render.To = mail.To // mail := tools.GetMessage(mailServer.Server, mailServer.Email, mailServer.Password, fid, id)
render.Subject = mail.Subject // render.From = mail.From
render.Date = mail.Date // render.To = mail.To
render.HtmlBody = template.HTML(mail.Body) // render.Subject = mail.Subject
}() // render.Date = mail.Date
wg.Wait() // render.HtmlBody = template.HTML(mail.Body)
//}()
//wg.Wait()
tmpl.RenderView(w, render) tmpl.RenderView(w, render)
} }
@ -131,13 +150,13 @@ func check(w http.ResponseWriter, r *http.Request) {
password := r.PostFormValue("password") password := r.PostFormValue("password")
msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"})
w.Header().Set("content-type","text/json;charset=utf-8;") w.Header().Set("content-type", "text/json;charset=utf-8;")
if email != "" && server != "" && password != "" { if email != "" && server != "" && password != "" {
res := tools.CheckEmailPassword(server, email, password) res := tools.CheckEmailPassword(server, email, password)
if res { if res {
msg, _ = json.Marshal(tools.JsonResult{Code: 200, Msg: "验证成功,正在跳转..."}) msg, _ = json.Marshal(tools.JsonResult{Code: 200, Msg: "验证成功,正在跳转..."})
auth := fmt.Sprintf("%s|%s|%s", server, email, password) auth := fmt.Sprintf("%s|%s|%s", server, email, password)
tools.SetCookie("auth",auth,&w) tools.SetCookie("auth", auth, &w)
w.Write(msg) w.Write(msg)
} else { } else {
w.Write(msg) w.Write(msg)
@ -146,6 +165,7 @@ func check(w http.ResponseWriter, r *http.Request) {
w.Write(msg) w.Write(msg)
} }
} }
//邮件夹接口 //邮件夹接口
func folders(w http.ResponseWriter, r *http.Request) { func folders(w http.ResponseWriter, r *http.Request) {
values := r.URL.Query() values := r.URL.Query()
@ -164,31 +184,31 @@ func folders(w http.ResponseWriter, r *http.Request) {
currentPage = 1 currentPage = 1
} }
mailServer:=tools.GetMailServerFromCookie(r) mailServer := tools.GetMailServerFromCookie(r)
w.Header().Set("content-type","text/json;charset=utf-8;") w.Header().Set("content-type", "text/json;charset=utf-8;")
if mailServer==nil{ if mailServer == nil {
msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"})
w.Write(msg) w.Write(msg)
return return
} }
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(2) wg.Add(2)
result :=make(map[string]interface{}) result := make(map[string]interface{})
go func() { go func() {
defer wg.Done() defer wg.Done()
folders := tools.GetFolders(mailServer.Server, mailServer.Email,mailServer.Password, fid) folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid)
result["folders"]=folders result["folders"] = folders
result["total"]=folders[fid] result["total"] = folders[fid]
}() }()
go func() { go func() {
defer wg.Done() defer wg.Done()
mails := tools.GetFolderMail(mailServer.Server, mailServer.Email, mailServer.Password, fid, currentPage, PageSize) mails := tools.GetFolderMail(mailServer.Server, mailServer.Email, mailServer.Password, fid, currentPage, PageSize)
result["mails"]=mails result["mails"] = mails
}() }()
wg.Wait() wg.Wait()
result["pagesize"]=PageSize result["pagesize"] = PageSize
result["fid"]=fid result["fid"] = fid
msg, _ := json.Marshal(tools.JsonFolders{ msg, _ := json.Marshal(tools.JsonFolders{
JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"}, JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"},
@ -196,6 +216,7 @@ func folders(w http.ResponseWriter, r *http.Request) {
}) })
w.Write(msg) w.Write(msg)
} }
//邮件接口 //邮件接口
func mail(w http.ResponseWriter, r *http.Request) { func mail(w http.ResponseWriter, r *http.Request) {
values := r.URL.Query() values := r.URL.Query()
@ -212,22 +233,22 @@ func mail(w http.ResponseWriter, r *http.Request) {
} else { } else {
id = 0 id = 0
} }
mailServer:=tools.GetMailServerFromCookie(r) mailServer := tools.GetMailServerFromCookie(r)
w.Header().Set("content-type","text/json;charset=utf-8;") w.Header().Set("content-type", "text/json;charset=utf-8;")
if mailServer==nil{ if mailServer == nil {
msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"}) msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"})
w.Write(msg) w.Write(msg)
return return
} }
var wg sync.WaitGroup var wg sync.WaitGroup
result :=make(map[string]interface{}) result := make(map[string]interface{})
wg.Add(2) wg.Add(2)
go func() { go func() {
defer wg.Done() defer wg.Done()
folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid) folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid)
result["folders"]=folders result["folders"] = folders
result["total"]=folders[fid] result["total"] = folders[fid]
}() }()
go func() { go func() {
defer wg.Done() defer wg.Done()
@ -239,7 +260,7 @@ func mail(w http.ResponseWriter, r *http.Request) {
result["html"] = mail.Body result["html"] = mail.Body
}() }()
wg.Wait() wg.Wait()
result["fid"]=fid result["fid"] = fid
msg, _ := json.Marshal(tools.JsonFolders{ msg, _ := json.Marshal(tools.JsonFolders{
JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"}, JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"},
@ -247,4 +268,3 @@ func mail(w http.ResponseWriter, r *http.Request) {
}) })
w.Write(msg) w.Write(msg)
} }

@ -7,7 +7,6 @@
<title>GO-IMAP网页版邮箱imap工具</title> <title>GO-IMAP网页版邮箱imap工具</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/theme-chalk/index.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/theme-chalk/index.css">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-router/dist/vue-router.js"></script>
<script src="https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/index.js"></script> <script src="https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/index.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
<style> <style>
@ -42,6 +41,9 @@
margin-left: 10px; margin-left: 10px;
margin-bottom: 60px; margin-bottom: 60px;
} }
.el-card__body{
cursor: pointer;
}
</style> </style>
</head> </head>
@ -90,27 +92,14 @@
:total="mailTotal"> :total="mailTotal">
</el-pagination> </el-pagination>
</el-main> </el-main>
<router-view></router-view>
</el-container> </el-container>
</template> </template>
<template id="mailList">
<div>aaa</div>
</template>
</div> </div>
</body> </body>
<script> <script>
const list = { template: mailList };
const view = { template: '<div>bbb</div>' };
const routes = [
{ path: '/', component: list },
{ path: '/view', component: view }
];
const router = new VueRouter({
routes // (缩写) 相当于 routes: routes
})
new Vue({ new Vue({
router,
el: '#app', el: '#app',
delimiters:["<{","}>"], delimiters:["<{","}>"],
data: { data: {
@ -151,7 +140,7 @@
}, },
}, },
created: function () { created: function () {
this.getFolders(); this.getFolders({{.CurrentPage}},{{.Fid}});
} }
}) })

@ -7,7 +7,7 @@ import (
) )
func RenderList(w http.ResponseWriter, render interface{}) { func RenderList(w http.ResponseWriter, render interface{}) {
html:=tools.FileGetContent("html/list.html") html := tools.FileGetContent("html/list.html")
t, _ := template.New("list").Parse(html) t, _ := template.New("list").Parse(html)
t.Execute(w,nil) t.Execute(w, render)
} }

@ -7,7 +7,7 @@ import (
) )
func RenderLogin(w http.ResponseWriter, render interface{}) { func RenderLogin(w http.ResponseWriter, render interface{}) {
html:=tools.FileGetContent("html/login.html") html := tools.FileGetContent("html/login.html")
t, _ := template.New("login").Parse(html) t, _ := template.New("login").Parse(html)
t.Execute(w, render) t.Execute(w, render)
} }

@ -72,7 +72,7 @@ func RenderView(w http.ResponseWriter, render interface{}) {
</body> </body>
</html> </html>
` `
html1:=tools.FileGetContent("html/view.html") html1 := tools.FileGetContent("html/view.html")
t, _ := template.New("view").Parse(html1) t, _ := template.New("view").Parse(html1)
t.Execute(w, render) t.Execute(w, render)
} }

@ -4,7 +4,8 @@ import (
"net/http" "net/http"
"strings" "strings"
) )
func SetCookie(name string,value string,w *http.ResponseWriter){
func SetCookie(name string, value string, w *http.ResponseWriter) {
cookie := http.Cookie{ cookie := http.Cookie{
Name: name, Name: name,
Value: value, Value: value,
@ -20,17 +21,16 @@ func GetCookie(r *http.Request, name string) string {
} }
return "" return ""
} }
func GetMailServerFromCookie(r *http.Request)*MailServer{ func GetMailServerFromCookie(r *http.Request) *MailServer {
auth := GetCookie(r, "auth") auth := GetCookie(r, "auth")
if !strings.Contains(auth, "|") { if !strings.Contains(auth, "|") {
return nil return nil
} }
authStrings := strings.Split(auth, "|") authStrings := strings.Split(auth, "|")
mailServer:=&MailServer{ mailServer := &MailServer{
Server:authStrings[0], Server: authStrings[0],
Email: authStrings[1], Email: authStrings[1],
Password: authStrings[2], Password: authStrings[2],
} }
return mailServer return mailServer
} }

@ -135,12 +135,12 @@ func GetFolderMail(server string, email string, password string, folder string,
mailitem.Subject = ret mailitem.Subject = ret
mailitem.Id = msg.SeqNum mailitem.Id = msg.SeqNum
mailitem.Fid = folder mailitem.Fid = folder
mailitem.Date=msg.Envelope.Date.String() mailitem.Date = msg.Envelope.Date.String()
from:="" from := ""
for _,s:=range msg.Envelope.Sender{ for _, s := range msg.Envelope.Sender {
from+=s.Address() from += s.Address()
} }
mailitem.From=from mailitem.From = from
mailPagelist.MailItems = append(mailPagelist.MailItems, mailitem) mailPagelist.MailItems = append(mailPagelist.MailItems, mailitem)
} }
return mailPagelist.MailItems return mailPagelist.MailItems

@ -21,11 +21,11 @@ func Reverse(s string) string {
} }
//转换编码 //转换编码
func Encoding(html string,ct string) string { func Encoding(html string, ct string) string {
e,name:=DetermineEncoding(html) e, name := DetermineEncoding(html)
if name!="utf-8"{ if name != "utf-8" {
html=ConvertToStr(html,"gbk","utf-8") html = ConvertToStr(html, "gbk", "utf-8")
e=unicode.UTF8 e = unicode.UTF8
} }
r := strings.NewReader(html) r := strings.NewReader(html)
@ -34,15 +34,15 @@ func Encoding(html string,ct string) string {
all, _ := ioutil.ReadAll(utf8Reader) all, _ := ioutil.ReadAll(utf8Reader)
return string(all) return string(all)
} }
func DetermineEncoding(html string) (encoding.Encoding,string) { func DetermineEncoding(html string) (encoding.Encoding, string) {
e, name, _ := charset.DetermineEncoding([]byte(html), "") e, name, _ := charset.DetermineEncoding([]byte(html), "")
return e,name return e, name
} }
func FileGetContent(file string)string{ func FileGetContent(file string) string {
str:="" str := ""
box := packr.NewBox("../static") box := packr.NewBox("../static")
content,err:=box.FindString(file) content, err := box.FindString(file)
if err!=nil{ if err != nil {
return str return str
} }
return content return content

@ -4,11 +4,12 @@ import (
"fmt" "fmt"
"mime" "mime"
) )
func main(){
func main() {
dec := new(mime.WordDecoder) dec := new(mime.WordDecoder)
header, err := dec.DecodeHeader("=?utf-8?q?=C3=89ric?= <eric@example.org>, =?utf-8?q?Ana=C3=AFs?= <anais@example.org>") header, err := dec.DecodeHeader("=?utf-8?q?=C3=89ric?= <eric@example.org>, =?utf-8?q?Ana=C3=AFs?= <anais@example.org>")
if err != nil { if err != nil {
panic(err) panic(err)
} }
fmt.Println(header) fmt.Println(header)
} }

@ -1,8 +1,9 @@
package tools package tools
import "html/template" import "html/template"
type MailServer struct{
Server,Email,Password string type MailServer struct {
Server, Email, Password string
} }
type IndexData struct { type IndexData struct {
Folders map[string]int Folders map[string]int
@ -30,11 +31,11 @@ type MailItem struct {
type MailPageList struct { type MailPageList struct {
MailItems []*MailItem MailItems []*MailItem
} }
type JsonResult struct{ type JsonResult struct {
Code int `json:"code"` Code int `json:"code"`
Msg string `json:"msg"` Msg string `json:"msg"`
} }
type JsonFolders struct{ type JsonFolders struct {
JsonResult JsonResult
Result interface{} `json:"result"` Result interface{} `json:"result"`
} }

Loading…
Cancel
Save