栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

另一方面,如果我们谈论的是POSIX系统,例如基于GNU / Linux或* BSD的操作系统,它们 通常
带有二进制文件

/usr/sbin/sendmail
,有时甚至
/usr/bin/sendmail
是由实际的Sendmail软件包或存在的另一个MTA提供的。数量丰富-
从成熟的MTA(例如Postfix或Exim)到范围狭窄的“空客户端”(例如
ssmtp
或)
nullmailer


通常使用

-t
命令行选项来调用该程序,从而使该程序从
To
邮件本身的标题中读取邮件收件人的地址。

基本上

/usr/sbin/sendmail-t
,将整个消息的文本调用并将其传递到其标准输入是PHP的
mail()
功能
FWIW。

虽然你可以做到这一点的呼叫直接使用

os/exec
net/mail
net/textproto
标准包,流行
gomail
包提供了一个更简单的方法来做到这一点:它的
Message
类型提供的
WriteTo()
是能够写入运行Sendmail的情况下,像这样(从一个真正的程序复制方法矿):

const sendmail = "/usr/sbin/sendmail"func submitMail(m *gomail.Message) (err error) {    cmd := exec.Command(sendmail, "-t")    cmd.Stdout = os.Stdout    cmd.Stderr = os.Stderr    pw, err := cmd.StdinPipe()    if err != nil {        return    }    err = cmd.Start()    if err != nil {        return    }    var errs [3]error    _, errs[0] = m.WriteTo(pw)    errs[1] = pw.Close()    errs[2] = cmd.Wait()    for _, err = range errs {        if err != nil { return        }    }    return}

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号