package models import ( "fmt" "main/configs" "math/rand" "net/smtp" "time" "github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi" ) type Code struct { Email string `json:"email"` Mobile string `json:"mobile"` Code string `json:"code"` Expire time.Time `json:"expire"` } func init() { configs.ORMDB().AutoMigrate(&Code{}) } func CodeCreate(email, mobile string) (err error) { code := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) // 如果是邮箱,发送邮件 if email != "" { message := ` To: xxx@qq.com From: 发送邮件的人名称 Subject: 使用Golang发送邮件 Content-Type: text/html; charset=UTF-8 MMOGA POWER 您的验证码: 123456 ` // 发送邮件到邮箱 auth := smtp.PlainAuth("", "admin@mochu.art", "password", "smtpdm.aliyun.com") if err := smtp.SendMail("smtpdm.aliyun.com:80", auth, "admin@mochu.art", []string{"xxx@qq.com"}, []byte(message)); err != nil { //发送邮件失败 fmt.Println(err) return err } } // 如果是手机,发送短信 if mobile != "" { // 发送短信 client, err := dysmsapi.NewClientWithAccessKey("cn-hangzhou", "your-access-key-id", "your-access-key-secret") if err != nil { fmt.Println(err) return err } request := dysmsapi.CreateSendSmsRequest() request.Scheme = "https" request.PhoneNumbers = mobile request.SignName = "Mochu" request.TemplateCode = "SMS_123456" request.TemplateParam = "{\"code\":\"" + code + "\"}" response, err := client.SendSms(request) if err != nil { fmt.Println(err) return err } fmt.Println(response) } // 保存验证码 configs.ORMDB().Create(&Code{ Email: email, Mobile: mobile, Code: code, Expire: time.Now().Add(time.Minute * 5), }) return nil } func EmailCheck(email, code string) (err error) { var data Code configs.ORMDB().Where("email = ?", email).First(&data) if data.Code == code && data.Expire.After(time.Now()) { return nil } return fmt.Errorf("验证码错误") } func MobileCheck(mobile, code string) (err error) { var data Code configs.ORMDB().Where("mobile = ?", mobile).First(&data) if data.Code == code && data.Expire.After(time.Now()) { return nil } return fmt.Errorf("验证码错误") }