service/library/email/send.go

54 lines
1.3 KiB
Go

package email
import (
"fmt"
"io"
"net/http"
"service/dbstruct"
"service/library/logger"
"strings"
"gopkg.in/gomail.v2"
)
func SendRavenIQTestResult(mail *dbstruct.Email, host string, port int, address, password string) error {
url := mail.MediaComponent.Images[0].Urls[0]
format := mail.MediaComponent.Images[0].Fmt
body := &strings.Builder{}
h2 := fmt.Sprintf("<h2>%v</h2>", mail.GetText())
img := fmt.Sprintf("<img border=\"0\" src=\"%v\" alt=\"图片加载错误,请联系管理员\">", url)
body.WriteString(h2)
body.WriteString(img)
response, err := http.Get(url)
if err != nil {
return err
}
attach, err := io.ReadAll(response.Body)
response.Body.Close()
if err != nil {
return err
}
attachName := fmt.Sprintf("测评结果.%v", format[6:])
m := gomail.NewMessage()
m.SetHeader("From", mail.GetFrom())
m.SetHeader("To", mail.GetTo())
m.SetHeader("Subject", mail.GetSubject())
m.SetBody("text/html", body.String())
m.Attach(attachName, gomail.SetCopyFunc(func(w io.Writer) error { //设置邮件附件 第一个参数是附件名称 第二个参数是二进制文件流
_, err := w.Write(attach)
return err
}))
err = gomail.NewDialer(host, port, address, password).DialAndSend(m)
if err != nil {
logger.Error("Send Email Fail", err)
return err
}
return nil
}