func (e Account) sendEmail(user *models.User, verifyType, subject string) error { var ( mailerServer = r.Config.StringDefault("mailer.server", "smtp.example.org") mailerPort = r.Config.IntDefault("mailer.port", 25) mailerUsername = r.Config.StringDefault("mailer.username", "<username>") mailerPassword = r.Config.StringDefault("mailer.password", "<password>") mailerFromAddr = r.Config.StringDefault("mailer.fromaddress", "*****@*****.**") mailerReplyAddr = r.Config.StringDefault("mailer.replyaddress", "*****@*****.**") callbackHost = r.Config.StringDefault("http.host", "http://localhost:9000") ) // If mail has not been configured, don't try to send a confirmation email if mailerServer == "smtp.example.org" { return nil } mailer := m.Mailer{Server: mailerServer, Port: mailerPort, UserName: mailerUsername, Password: mailerPassword} mailer.Sender = &m.Sender{From: mailerFromAddr, ReplyTo: mailerReplyAddr} // Generate a new token and store against the user's id verifyEmailToken := e.generateVerifyHash(16) e.storeVerifyHashRecord(user.Email, verifyType, verifyEmailToken) // arguments used for template rendering var args = make(map[string]interface{}) args["user"] = user args["Link"] = callbackHost + "/account/" + verifyType + "/" + string(verifyEmailToken) message := &m.Message{To: []string{user.Email}, Subject: subject} rErr := message.RenderTemplate("email/"+verifyType, args) if rErr != nil { return rErr } sErr := mailer.SendMessage(message) if sErr != nil { return sErr } fmt.Println("Mail sent to " + string(user.Email)) return nil }