diff --git a/emails.go b/emails.go index d228083..139498a 100644 --- a/emails.go +++ b/emails.go @@ -161,7 +161,7 @@ func SendAlert(u int64, subject, body string) error { if !ok { return fmt.Errorf("scsusers.SendAlert: User %d not found", u) } - email, ok := user.Get("email") + email, ok := user.GetEmail() if !ok { return fmt.Errorf("scsusers.SendAlert: User %d has no email", u) } diff --git a/meta.go b/meta.go index 14ae305..7614910 100644 --- a/meta.go +++ b/meta.go @@ -4,6 +4,7 @@ import ( "database/sql" "fmt" "log" + "net/mail" ) type Metadata struct { @@ -11,6 +12,24 @@ type Metadata struct { MetaValue string `db:"meta_value"` } +func (u *UserData) GetEmail() (string, bool) { + _, err := mail.ParseAddress(u.Username) + + if err == nil { + return u.Username, true + } + + e, ok := u.Get("email") + if !ok { + return "", false + } + _, err = mail.ParseAddress(e) + if err != nil { + return "", false + } + return e, true +} + func (u *UserData) LoadMeta() bool { q := fmt.Sprintf("select meta_key, meta_value, id from %s_meta where user=?", c.TablePrefix) rows, err := c.db.Query(q, u.UserID)