邮件发送服务
需求:
能够通过apifox传入参数,包括标题,内容,和发送地址(邮箱)
这里使用了第三方gmail库来实现
引入gmail库
go get -v gopkg.in/gomail.v2
然后看代码
package main
import (
"encoding/json"//引入json处理库,用于处理json数据
"fmt"
"gopkg.in/gomail.v2"//引入第三方库
"io/ioutil"
"net/http"
)
const (
// 邮件服务器地址,这里是指定的
MailHost = "smtp.qq.com"
// 端口,也是指定的
MailPort = 587
// 发送邮件用户账号
MailUser = "xxxxxxxx@qq.com"
// 授权密码
MailPwd = "xxxxxxxx"
//授权密码需要打开POP3/SMTP 和IMAP/SMTP服务,需要登录邮箱设置后开启
)
//用于接收json格式的结构体
type mailparam struct {
Address string `json:"mailAddress"`
Body string `json:"mailBody"`
Title string `json:"mailTitle"`
}
//传入w用于返回数据,r用于处理传递过来的数据
func mail(w http.ResponseWriter, r *http.Request) {
fmt.Println("handle email") // 服务端打印输出
//fmt.Println(r.Header)
b, err := ioutil.ReadAll(r.Body)//解析body参数
if err != nil {
fmt.Println("解析出错")
}
var postJson mailparam
json.Unmarshal([]byte(b), &postJson)//json反序列化
fmt.Println(postJson)
address , body , title:= postJson.Address,postJson.Body,postJson.Title
SendMail(address, title, body)//调用函数
json, _ := json.Marshal(postJson)//json序列化
w.Write(json)//向请求返回json类数据
}
func main() {
http.HandleFunc("/mail", mail) // 匹配根路由,即路径
err := http.ListenAndServe("localhost:8888", nil)//监听8888端口
if err != nil {
fmt.Println("服务器创建出错err=", err)
return
}
}
//传入3个参数,地址、标题、内容,返回错误
func SendMail(address, subject, body string) error {
m := gomail.NewMessage()
m.SetHeader("From", "superxmy<xxxxxxx@qq.com>")
m.SetHeader("To", address)
m.SetHeader("Subject", subject)
m.SetBody("text/html", body)
d := gomail.NewDialer(MailHost, MailPort, MailUser, MailPwd)
err := d.DialAndSend(m)
return err
}
Q.E.D.