邮件发送服务
需求:
能够通过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.