package service import ( "app.yhyue.com/moapp/jybase/mail" "context" "fmt" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "strings" "time" ) type ( mailConfig struct { Addr string Port int Pwd string User string } invoiceRecord struct { InvoiceType string `json:"invoice_type"` Mail string `json:"mail"` TaxpayerIdentnum string `json:"taxpayer_identnum"` CompanyName string `json:"company_name"` Phone string `json:"phone"` Url string `json:"url"` OrderCode string `json:"order_code"` } ) var ( GmailAuth []*mail.GmailAuth mailConfigArr []*mailConfig ) const ( emailHtml_header = ` 电子发票

尊敬的用户您好!

感谢您在剑鱼标讯(jianyu360.com)购物!

剑鱼标讯已为您的订单: %s 开具%s,总共 1 张。

%s

安全提醒:剑鱼标讯平台及销售商不会以订单异常、系统升级等理由,通过任何方式发送给您退款链接。请您谨防钓鱼链接或诈骗电话!

发票信息

发票类型: %s

发票内容: 信息技术服务-技术服务费

` emailHtml_gs = `

公司名称: %s

纳税人识别号: %s

联系电话: %s

电子邮箱: %s

` emailHtml_gr = `

联系电话: %s

电子邮箱: %s

` ) func init() { ctx := context.Background() err := g.Cfg().MustGet(ctx, "mailConfig").Struct(&mailConfigArr) if err != nil { g.Log().Panic(ctx, "初始化邮件配置异常") } for _, v := range mailConfigArr { GmailAuth = append(GmailAuth, &mail.GmailAuth{ SmtpHost: v.Addr, SmtpPort: v.Port, User: v.User, Pwd: v.Pwd, }) } //SendMail(ctx, "wangkaiyue@topnet.net.cn", "

Hello world

", "测试邮件") } func SendMail(ctx context.Context, targetMail, html, title string) error { for k, v := range GmailAuth { if mail.GSendMail("剑鱼标讯", targetMail, "", "", title, html, "", "", v) { g.Log().Infof(ctx, "发送邮件成功%s", targetMail) break } if k < len(GmailAuth)-1 { g.Log().Infof(ctx, "发送邮件失败%s!3s后使用其他邮箱尝试", targetMail) } else { return gerror.Newf("发送邮件失败%s![final]", targetMail) } time.Sleep(time.Second * 3) } return nil } func SendInvoiceSuccessMail(ctx context.Context, orderCode string) error { var ( queryItem = "order_code" err error record invoiceRecord ) if strings.Contains(orderCode, "xx") { //自助开票 queryItem = "only_Identifying" } res, err := g.DB().GetOne(ctx, fmt.Sprintf("SELECT invoice_type,mail,taxpayer_identnum,company_name,phone,url FROM invoice WHERE %s = ? ", queryItem), orderCode) if err != nil { return gerror.Wrapf(err, "未查询到订单发票信息 %s:%s", queryItem, orderCode) } if err = res.Struct(&record); err != nil { return gerror.Wrapf(err, "格式化发票信息异常") } if record.Mail == "" { return nil } return SendMail(ctx, record.Mail, record.GetMailHtmlContext(), "电子发票") } func (ir *invoiceRecord) GetMailHtmlContext() string { switch ir.InvoiceType { case "单位": return fmt.Sprintf(emailHtml_header+emailHtml_gs, ir.OrderCode, "电子普通发票", fmt.Sprintf("下载发票", ir.Url), "电子普通发票", ir.CompanyName, ir.TaxpayerIdentnum, ir.Phone, ir.Mail) case "个人": return fmt.Sprintf(emailHtml_header+emailHtml_gr, ir.OrderCode, "电子普通发票", fmt.Sprintf("下载发票", ir.Url), "电子普通发票", ir.Phone, ir.Mail) } return "" }