diff --git a/object/email.go b/object/email.go index f0099dee..3a4d94b1 100644 --- a/object/email.go +++ b/object/email.go @@ -16,35 +16,20 @@ package object -import ( - "strconv" +import "github.com/go-gomail/gomail" - "github.com/astaxie/beego" - "github.com/go-gomail/gomail" -) +func SendEmail(title, content, dest, sender string) (string, error) { + provider := getDefaultEmailProvider() + if provider == nil { + return "Please set an Email provider first", nil + } + dialer := gomail.NewDialer(provider.Host, provider.Port, provider.ClientId, provider.ClientSecret) -var dialer *gomail.Dialer - -var mailConn = map[string]string{ - "user": beego.AppConfig.String("mailUser"), - "pass": beego.AppConfig.String("mailPass"), - "host": beego.AppConfig.String("mailHost"), - "port": beego.AppConfig.String("mailPort"), -} - -func InitDialer() { - port, _ := strconv.Atoi(mailConn["port"]) - dialer = gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"]) -} - -func SendEmail(title, content, dest, sender string) error { message := gomail.NewMessage() - message.SetAddressHeader("From", beego.AppConfig.String("mailUser"), sender) + message.SetAddressHeader("From", provider.ClientId, sender) message.SetHeader("To", dest) message.SetHeader("Subject", title) message.SetBody("text/html", content) - if dialer == nil { - InitDialer() - } - return dialer.DialAndSend(message) + + return "", dialer.DialAndSend(message) } diff --git a/object/provider.go b/object/provider.go index 24c04b31..fcb4c07b 100644 --- a/object/provider.go +++ b/object/provider.go @@ -63,6 +63,19 @@ func GetProvider(id string) *Provider { return getProvider(owner, name) } +func getDefaultEmailProvider() *Provider { + provider := Provider{Owner: "admin", Category: "Email"} + existed, err := adapter.Engine.Get(&provider) + if err != nil { + panic(err) + } + + if !existed { + return nil + } + return &provider +} + func UpdateProvider(id string, provider *Provider) bool { owner, name := util.GetOwnerAndNameFromId(id) if getProvider(owner, name) == nil { diff --git a/object/verification.go b/object/verification.go index 8ea40f88..59db91c9 100644 --- a/object/verification.go +++ b/object/verification.go @@ -29,8 +29,8 @@ type VerificationRecord struct { } func SendVerificationCodeToEmail(remoteAddr, dest string) string { - title := "Casdoor Code" - sender := "Casdoor Admin" + title := "Casdoor Verification Code" + sender := "Casdoor" code := getRandomCode(5) content := fmt.Sprintf("You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes.", code) @@ -38,7 +38,11 @@ func SendVerificationCodeToEmail(remoteAddr, dest string) string { return result } - if err := SendEmail(title, content, dest, sender); err != nil { + msg, err := SendEmail(title, content, dest, sender) + if msg != "" { + return msg + } + if err != nil { panic(err) } diff --git a/util/regex.go b/util/regex.go index 2437c5d7..66430d90 100644 --- a/util/regex.go +++ b/util/regex.go @@ -14,18 +14,20 @@ package util -import "regexp" +import ( + "net/mail" + "regexp" +) -var reEmail *regexp.Regexp var rePhoneCn *regexp.Regexp func init() { - reEmail, _ = regexp.Compile(`^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$`) rePhoneCn, _ = regexp.Compile("^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|191|198|199|(147))\\d{8}$") } func IsEmailValid(email string) bool { - return reEmail.MatchString(email) + _, err := mail.ParseAddress(email) + return err == nil } func IsPhoneCnValid(phone string) bool {