在goroutine中发送电子邮件

时间:2014-11-10 08:38:54

标签: go

我正在尝试用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中将发生错误且响应已完成(用户收到响应),那么我该如何处理错误?

1 个答案:

答案 0 :(得分:0)

我假设:

  1. 一个人注册帐户
  2. 您向他们发送带有激活链接的确认电子邮件
  3. 一旦他们点击了链接,他们的帐户就可以现在"做东西"
  4. 如果是这种情况:

    您应该将此发送邮件操作的失败或成功记录到某种状态存储(SQL DB,mongo,leveldb等),然后当用户登录(或导航到页面)时,您可以通知他们他们的帐户仍需要确认(假设发送操作或点击确认链接的URL从未发生过)并提供重新发送电子邮件。

    另一个选择是响应提交电子邮件地址等待发送电子邮件(不要开始goroutine),但如果你有很多注册,这可能无法很好地扩展...并且你仍然需要保持点击激活链接的状态。所以第一个选择更好。