kos*_*tix 10

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

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

/usr/sbin/sendmail/usr/bin/sendmailssmtpnullmailer
-tTo
/usr/sbin/sendmail -tmail()
os/execnet/mailnet/textprotogomailMessageWriteTo()
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天)超时到期.