package user import ( "context" "encoding/json" "fmt" "html/template" "io" "log" "net/http" "net/smtp" "strings" "time" "math/rand" "github.com/go-redis/redis/v8" ) type Userregveri struct { Email string `json:"email"` } func randomCode() string { source := rand.NewSource(time.Now().UnixNano()) r := rand.New(source) letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") b := make([]rune, 6) for i := range b { b[i] = letters[r.Intn(len(letters))] } return string(b) } func Registerverify(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "http://localhost:5173") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") w.Header().Set("Access-Control-Allow-Credentials", "true") if r.Method == "OPTIONS" { w.WriteHeader(http.StatusOK) return } bodyrec, error := io.ReadAll(r.Body) if error != nil { fmt.Println("接受数据错误") return } var bodyjx Userregveri error = json.Unmarshal(bodyrec, &bodyjx) if error != nil { fmt.Println("数据解析失败") return } var useremail = bodyjx.Email log.Println("邮箱是", useremail) redisdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) var redisverifyhash = "userverify" _, error = redisdb.Ping(context.Background()).Result() if error != nil { log.Println("redis连接失败") return } result, _ := redisdb.Exists(context.Background(), redisverifyhash, useremail).Result() if result == 1 { log.Println("用户验证码已经存在") redisdb.HDel(context.Background(), redisverifyhash, useremail) } log.Println(result) codesend := randomCode() error = redisdb.HSet(context.Background(), redisverifyhash, map[string]string{ "useremail": useremail, "userver": codesend, }).Err() if error != nil { log.Println("redis键值设置失败") return } _, error = redisdb.Expire(context.Background(), redisverifyhash, 3*time.Minute).Result() if error != nil { log.Println("有效时长设置失败") return } from := "mayiming_person@163.com" password := "VChadvNigu6TdzYH" to := []string{useremail} subject := "MS用户验证码 --MS助手" htmlContent := `以下为您的验证码,3分钟内有效,请勿分享给别人. 验证码:` + string(codesend) + `` t, err := template.New("emailBody").Parse(htmlContent) if err != nil { log.Fatal(err) } var bodyBuilder strings.Builder err = t.Execute(&bodyBuilder, nil) if err != nil { log.Fatal(err) } body := bodyBuilder.String() msg := "From: " + from + "\r\n" + "To: " + to[0] + "\r\n" + "Subject: " + subject + "\r\n" + "\r\n" + body smtpServer := "smtp.163.com:25" auth := smtp.PlainAuth("", from, password, "smtp.163.com") err = smtp.SendMail(smtpServer, auth, from, to, []byte(msg)) if err != nil { log.Fatal(err) } log.Println("邮箱发送成功!") }