在 Go 中没有 SMTP 服务器发送电子邮件
问题:
您想要发送由于使用限制,无需依赖外部 SMTP 服务器即可批量发送电子邮件。你可以使用 Go 的标准库在没有 SMTP 服务器的情况下发送电子邮件吗?
答案:
要在没有 SMTP 服务器的情况下发送电子邮件,你必须将任务委托给另一个有能力的程序发送电子邮件。在 POSIX 系统中,/usr/sbin/sendmail 程序通常可用于此目的。您可以使用 -t 选项调用它,以从邮件的 To 标头中检索收件人地址。
将标准库与 Sendmail 结合使用
您可以使用 os/exec 、net/mail 和 net/textproto 包直接调用 Sendmail,但 gomail 包提供了更简单的解决方案。它的 Message 类型包括一个 WriteTo() 方法,可以写入正在运行的 Sendmail 实例。下面是一个示例:
<code class="go">import ( "os/exec" "github.com/go-gomail/gomail" ) const sendmailPath = "/usr/sbin/sendmail" func sendEmail(m *gomail.Message) error { cmd := exec.Command(sendmailPath, "-t") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr stdin, err := cmd.StdinPipe() if err != nil { return err } if err := cmd.Start(); err != nil { return err } if _, err := m.WriteTo(stdin); err != nil { return err } if err := stdin.Close(); err != nil { return err } if err := cmd.Wait(); err != nil { return err } return nil }</code>
使用 MTA 的优点:
虽然使用 MTA 可能看起来像是一个额外的步骤,但它提供了邮件排队的优势。如果 MTA 无法立即传递邮件(例如在网络中断期间),它会将邮件存储在队列中并重复尝试传递邮件,直到成功或发生超时。
以上是我可以在不使用 SMTP 服务器的情况下在 Go 中发送电子邮件吗?的详细内容。更多信息请关注PHP中文网其他相关文章!