我正在尝试用golang编写身份验证系统。
用户成功注册后,会向用户发送确认电子邮件。
我正在考虑在goroutine中执行发送邮件功能。发送邮件功能的代码如下所示
func Send(email, link string) error {
// Connect to the remote SMTP server.
c, err := smtp.Dial("127.0.0.1:2525")
if err != nil {
return err
}
// Set the sender and recipient.
c.Mail("sender@example.org")
c.Rcpt(email)
// Send the email body.
wc, err := c.Data()
if err != nil {
return err
}
defer wc.Close()
buf := bytes.NewBufferString("Please confirm this email " + link)
if _, err = buf.WriteTo(wc); err != nil {
return err
}
return nil
}
如果此处goroutine中将发生错误且响应已完成(用户收到响应),那么我该如何处理错误?
答案 0 :(得分:0)
我假设:
如果是这种情况:
您应该将此发送邮件操作的失败或成功记录到某种状态存储(SQL DB,mongo,leveldb等),然后当用户登录(或导航到页面)时,您可以通知他们他们的帐户仍需要确认(假设发送操作或点击确认链接的URL从未发生过)并提供重新发送电子邮件。
另一个选择是响应提交电子邮件地址等待发送电子邮件(不要开始goroutine),但如果你有很多注册,这可能无法很好地扩展...并且你仍然需要保持点击激活链接的状态。所以第一个选择更好。