mirror of https://github.com/IoTcat/auxpi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.4 KiB
106 lines
2.4 KiB
package utils |
|
|
|
import ( |
|
"bytes" |
|
"fmt" |
|
"html/template" |
|
"strconv" |
|
|
|
"github.com/astaxie/beego/logs" |
|
auxpi "github.com/auxpi/auxpiAll" |
|
"gopkg.in/gomail.v2" |
|
) |
|
|
|
type MailInfo struct { |
|
SiteName string |
|
Logo string |
|
SiteLink string |
|
UserIndex string |
|
UserCenter string |
|
Active string |
|
Content string |
|
} |
|
|
|
type Result struct { |
|
output string |
|
} |
|
|
|
func SendMail(mailTo []string, subject string, body string, site auxpi.SiteBase) error { |
|
|
|
//定义邮箱服务器连接信息,如果是阿里邮箱 pass填密码,qq邮箱填授权码 |
|
mailConn := map[string]string{ |
|
"user": site.MailConfig.User, |
|
"pass": site.MailConfig.Pass, |
|
"host": site.MailConfig.Host, |
|
"port": site.MailConfig.Port, |
|
} |
|
|
|
port, _ := strconv.Atoi(mailConn["port"]) |
|
|
|
m := gomail.NewMessage() |
|
m.SetHeader("To", mailTo...) |
|
m.SetHeader("Subject", subject) |
|
m.SetBody("text/html", body) |
|
|
|
d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"]) |
|
|
|
err := d.DialAndSend(m) |
|
return err |
|
|
|
} |
|
|
|
func RenderMail(tpl string, site auxpi.SiteBase, args ...string) string { |
|
|
|
if len(args) == 0 { |
|
return "" |
|
} |
|
token := "" |
|
active := "" |
|
mailContent := "" |
|
|
|
switch args[0] { |
|
case "register": |
|
token = args[1] |
|
active = site.SiteUrl + "register/active/" + token |
|
mailContent = `感谢您的注册,请点击下方的链接完成注册(如果不能再浏览器中打开,您可以直接复制到浏览器中然后进行访问) : ` |
|
case "reset": |
|
token = args[1] |
|
mailContent = `如果您不知道这封邮件是做什么请直删除邮件即可,点击下方链接找回您的密码(如果不能再浏览器中打开,您可以直接复制到浏览器中然后进行访问) : ` |
|
active = site.SiteUrl + "reset/" + token |
|
//共用这个就可以 |
|
tpl = "register.tpl" |
|
|
|
} |
|
|
|
var mailInfo = MailInfo{ |
|
SiteName: site.SiteName, |
|
SiteLink: site.SiteUrl, |
|
UserIndex: site.SiteUrl + "users/index", |
|
UserCenter: site.SiteUrl + "users/edit", |
|
Logo: "x", |
|
Active: active, |
|
Content: mailContent, |
|
} |
|
dir := "views/mail/" + tpl |
|
var t *template.Template |
|
buf := new(bytes.Buffer) |
|
|
|
t, err := t.ParseFiles(dir) |
|
if err != nil { |
|
logs.Alert(err) |
|
return "" |
|
} |
|
err = t.Execute(buf, mailInfo) |
|
if err != nil { |
|
logs.Alert(err) |
|
return "" |
|
} |
|
return buf.String() |
|
|
|
} |
|
|
|
func (p *Result) Write(b []byte) (n int, err error) { |
|
fmt.Println("called by template") |
|
p.output += string(b) |
|
return len(b), nil |
|
}
|
|
|