我正在尝试使用 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 将发生错误并且响应已经完成(用户收到响应),那么我该如何处理错误?
最佳答案
我假设:
- 一个人注册一个帐户
- 您向他们发送一封带有激活链接的确认电子邮件
- 一旦他们点击链接,他们的帐户现在就可以“做事”
如果是这样的话:
您可能应该将此发送邮件操作的失败或成功记录到某种有状态存储(SQL DB、mongo、leveldb 等),然后当用户登录(或导航到页面)时您可以通知他们他们的帐户仍然需要确认(假设发送操作或点击确认链接的 URL 从未发生过)并提出重新发送电子邮件。
另一种选择是对提交电子邮件地址做出响应,等待电子邮件发送(不要启动 goroutine),但如果你有很多注册,这可能无法很好地扩展......而且你无论如何,仍然需要维护点击激活链接的人的状态。所以第一个选项更好。
关于go - 在 goroutine 中发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26839709/