更新完成全部ajax获取数据

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

@ -5,7 +5,6 @@ import (
"fmt"
"github.com/taoshihan1991/imaptool/tmpl"
"github.com/taoshihan1991/imaptool/tools"
"html/template"
"log"
"net/http"
"strconv"
@ -40,8 +39,8 @@ func index(w http.ResponseWriter, r *http.Request) {
return
}
mailServer:=tools.GetMailServerFromCookie(r)
if mailServer==nil {
mailServer := tools.GetMailServerFromCookie(r)
if mailServer == nil {
http.Redirect(w, r, "/login", 302)
} else {
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) {
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 {
id = 0
}
mailServer:=tools.GetMailServerFromCookie(r)
var wg sync.WaitGroup
//
//mailServer:=tools.GetMailServerFromCookie(r)
//var wg sync.WaitGroup
var render = new(tools.ViewData)
wg.Add(1)
go func() {
defer wg.Done()
folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid)
render.Folders = folders
render.Fid = fid
}()
wg.Add(1)
go func() {
defer wg.Done()
mail := tools.GetMessage(mailServer.Server, mailServer.Email, mailServer.Password, fid, id)
render.From = mail.From
render.To = mail.To
render.Subject = mail.Subject
render.Date = mail.Date
render.HtmlBody = template.HTML(mail.Body)
}()
wg.Wait()
render.Fid = fid
render.Id = id
//wg.Add(1)
//go func() {
// defer wg.Done()
// folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid)
// render.Folders = folders
// render.Fid = fid
//}()
//wg.Add(1)
//go func() {
// defer wg.Done()
// mail := tools.GetMessage(mailServer.Server, mailServer.Email, mailServer.Password, fid, id)
// render.From = mail.From
// render.To = mail.To
// render.Subject = mail.Subject
// render.Date = mail.Date
// render.HtmlBody = template.HTML(mail.Body)
//}()
//wg.Wait()
tmpl.RenderView(w, render)
}
@ -131,13 +150,13 @@ func check(w http.ResponseWriter, r *http.Request) {
password := r.PostFormValue("password")
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 != "" {
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)
tools.SetCookie("auth", auth, &w)
w.Write(msg)
} else {
w.Write(msg)
@ -146,6 +165,7 @@ func check(w http.ResponseWriter, r *http.Request) {
w.Write(msg)
}
}
//邮件夹接口
func folders(w http.ResponseWriter, r *http.Request) {
values := r.URL.Query()
@ -164,31 +184,31 @@ func folders(w http.ResponseWriter, r *http.Request) {
currentPage = 1
}
mailServer:=tools.GetMailServerFromCookie(r)
w.Header().Set("content-type","text/json;charset=utf-8;")
mailServer := tools.GetMailServerFromCookie(r)
w.Header().Set("content-type", "text/json;charset=utf-8;")
if mailServer==nil{
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{})
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]
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
result["mails"] = mails
}()
wg.Wait()
result["pagesize"]=PageSize
result["fid"]=fid
result["pagesize"] = PageSize
result["fid"] = fid
msg, _ := json.Marshal(tools.JsonFolders{
JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"},
@ -196,6 +216,7 @@ func folders(w http.ResponseWriter, r *http.Request) {
})
w.Write(msg)
}
//邮件接口
func mail(w http.ResponseWriter, r *http.Request) {
values := r.URL.Query()
@ -212,22 +233,22 @@ func mail(w http.ResponseWriter, r *http.Request) {
} else {
id = 0
}
mailServer:=tools.GetMailServerFromCookie(r)
w.Header().Set("content-type","text/json;charset=utf-8;")
mailServer := tools.GetMailServerFromCookie(r)
w.Header().Set("content-type", "text/json;charset=utf-8;")
if mailServer==nil{
if mailServer == nil {
msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"})
w.Write(msg)
return
}
var wg sync.WaitGroup
result :=make(map[string]interface{})
result := make(map[string]interface{})
wg.Add(2)
go func() {
defer wg.Done()
folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid)
result["folders"]=folders
result["total"]=folders[fid]
result["folders"] = folders
result["total"] = folders[fid]
}()
go func() {
defer wg.Done()
@ -239,7 +260,7 @@ func mail(w http.ResponseWriter, r *http.Request) {
result["html"] = mail.Body
}()
wg.Wait()
result["fid"]=fid
result["fid"] = fid
msg, _ := json.Marshal(tools.JsonFolders{
JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"},
@ -247,4 +268,3 @@ func mail(w http.ResponseWriter, r *http.Request) {
})
w.Write(msg)
}

@ -7,7 +7,6 @@
<title>GO-IMAP网页版邮箱imap工具</title>
<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-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/jquery/dist/jquery.min.js"></script>
<style>
@ -42,6 +41,9 @@
margin-left: 10px;
margin-bottom: 60px;
}
.el-card__body{
cursor: pointer;
}
</style>
</head>
@ -90,27 +92,14 @@
:total="mailTotal">
</el-pagination>
</el-main>
<router-view></router-view>
</el-container>
</template>
<template id="mailList">
<div>aaa</div>
</template>
</div>
</body>
<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({
router,
el: '#app',
delimiters:["<{","}>"],
data: {
@ -151,7 +140,7 @@
},
},
created: function () {
this.getFolders();
this.getFolders({{.CurrentPage}},{{.Fid}});
}
})

@ -7,7 +7,7 @@ import (
)
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.Execute(w,nil)
t.Execute(w, render)
}

@ -7,7 +7,7 @@ import (
)
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.Execute(w, render)
}

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

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

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

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

@ -4,7 +4,8 @@ import (
"fmt"
"mime"
)
func main(){
func main() {
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>")
if err != nil {

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