如何在没有任何smtp服务器的情况下在golang中发送电子邮件

时间:2016-02-20 08:23:34

标签: email go smtp

我想从用golang编写的服务器应用程序发送批量邮件。我只是不想使用任何第三方smtp服务器来避免使用配额限制。

如何在没有smtp服务器的情况下发送电子邮件?标准库中的smtp包可以帮助我吗?我看到使用smtp包的所有示例都需要第三方smtp服务器来发送电子邮件。

2 个答案:

答案 0 :(得分:9)

只有一种方法可以在不直接与SMTP服务器通信的情况下发送电子邮件:将此操作委派给其他程序。

选择哪个程序,本身就是一个开放的问题,因为有很多程序可以发送邮件。

另一方面,如果我们谈论POSIX系统,例如基于GNU / Linux或* BSD的操作系统,它们通常带有二进制/usr/sbin/sendmail,或者有时, /usr/bin/sendmail由真实的Sendmail软件包或其他MTA提供,这些软件包存在于丰富的范围内 - 包括PostfixExim等完整的MTA缩小范围" null-clients"例如ssmtpnullmailer

此程序通常使用-t命令行选项调用,该选项使其从邮件消息本身的To标题中读取邮件收件人的地址。

基本上调用/usr/sbin/sendmail -t并将完整邮件的文本传递到其标准输入是PHP's mail() function所做的事情,FWIW。

虽然您可以使用os/execnet/mailnet/textproto标准软件包直接进行此调用,但受欢迎的gomail软件包提供了一种更简单的方法: {1}}类型提供了Message方法,该方法能够写入正在运行的Sendmail实例,就像这样(从我的真实程序中复制):

WriteTo()

实际上,依靠MTA传递邮件的一个优点是,完整的MTA支持邮件排队:即,如果MTA无法立即发送您的邮件(例如,由于网络中断等),那么它会将消息保存在一个特殊目录中,然后会定期尝试一次又一次地发送消息,直到成功或(通常很大,如4-5天)超时到期为止。

答案 1 :(得分:2)

您的问题看起来像 - 我可以在没有网络服务器的情况下向用户显示网页吗?是的,如果您能够编写自己的Web服务器,则可以。

你能在Go上写SMTP服务器吗?是。 Google为#go; golang smtp服务器"提供了少量解决方案。查询。因此,我非常确定您可以将SMTP服务器功能集成到您的应用程序中。

但是,正如评论者所说 - 你的大部分信息(如果不是全部)将直接转到大多数服务的垃圾邮件文件夹。