调整路由处理到控制器

pull/30/head
taoshihan1991 4 years ago
parent ea9d8fc457
commit 2c1fae79b7

@ -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)
}

@ -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)
}
}
}

@ -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)
}
}

@ -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\ngohttp://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) {

@ -1,5 +1,5 @@
<el-menu
default-active="1"
default-active="4"
mode="horizontal">
<el-menu-item index="1" class="mainLogo" v-on:click="openIframeUrl('/list')">GO-IMAP</el-menu-item>
<el-menu-item index="2" v-on:click="openIframeUrl('/list')">收信<el-badge class="mark" :value="mailTotal" style="margin-bottom: 20px;"/>

@ -4,12 +4,17 @@
<template>
<el-container v-loading.fullscreen.lock="fullscreenLoading">
<el-aside>
<el-menu
:default-active="1">
<el-menu-item :index="1">
<i class="el-icon-menu"></i>
<span slot="title">账户中心</span>
</el-menu-item>
<el-menu default-active="1" @open="1">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span>账户中心</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1">设置密码</el-menu-item>
<el-menu-item index="1-2">新增用户</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</el-aside>

@ -16,13 +16,13 @@
<el-main class="mainMain">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px">
<el-form-item label="smtp地址" prop="smtp">
<el-input v-model="ruleForm.smtp" placeholder="smtp地址"></el-input>
<el-input v-model="ruleForm.smtp" placeholder="SMTP服务器如smtp.sina.net:25包含端口号"></el-input>
</el-form-item>
<el-form-item label="主题" prop="subject">
<el-input v-model="ruleForm.subject"></el-input>
</el-form-item>
<el-form-item label="收件人" prop="email">
<el-input v-model="ruleForm.email"></el-input>
<el-form-item label="收件人" prop="to">
<el-input v-model="ruleForm.to"></el-input>
</el-form-item>
<el-form-item label="内容" prop="content">
<el-input type="textarea" v-model="ruleForm.content"></el-input>
@ -39,6 +39,7 @@
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
new Vue({
el: '#app',
@ -50,7 +51,7 @@
mailTotal:0,
ruleForm: {
smtp: '',
email: '',
to: '',
subject: '',
content: '',
},
@ -58,7 +59,7 @@
smtp: [
{ required: true, message: 'SMTP服务器如"smtp.sina.net:25"包含端口号', trigger: 'blur' },
],
email: [
to: [
{ required: true, message: '邮箱地址', trigger: 'blur' },
],
subject: [
@ -74,9 +75,10 @@
getFolders: function () {
this.fullscreenLoading=true;
let _this = this;
$.get('/folders', function (rs) {
$.get('/folder_dirs', function (rs) {
_this.folders=rs.result.folders;
_this.mailTotal=rs.result.total;
_this.fid=rs.result.fid;
_this.fullscreenLoading=false;
}).then(()=>{
_this.fullscreenLoading=false;
@ -92,6 +94,15 @@
this.$refs[formName].validate((valid) => {
console.log(valid,formName,this.$refs[formName]);
if (valid) {
let data=this.ruleForm;
let to=[];
to.push(this.ruleForm.to);
data.to=to;
axios.post('/send', data).then(function (response) {
console.log(response);
}).catch(function (error) {
console.log(error);
});
} else {
return false;
}

Loading…
Cancel
Save