为了账号安全,请及时绑定邮箱和手机立即绑定

Golang - 管道到外部执行

Golang - 管道到外部执行

Go
阿晨1998 2021-08-23 17:31:56
我正在尝试使用 Go 将电子邮件消息通过管道发送到 sendmail 二进制文件。如果我没有取消对 Wait() 调用的注释,则以下代码有效。如果没有注释,程序就会挂起。阅读wait的文档,我觉得应该调用它,所以我得出结论,我的示例代码中存在错误。关于它可能是什么的任何建议?package mainimport (        "io"        "os"        "os/exec"        "fmt")func main() {        msg := "From: source@email.address\n"        msg += "To: recipient@email.address\n"        msg += "Subject: Testing\n\n"        msg += "Hello World!\n"        sendmail := exec.Command("/usr/sbin/sendmail", "-t")        stdin, err := sendmail.StdinPipe()        if err != nil {                panic(err)        }        sendmail.Stdout = os.Stdout        sendmail.Stderr = os.Stderr        err = sendmail.Start()        if err != nil {                panic(err)        }        io.WriteString(stdin, msg)        //err = sendmail.Wait()        //if err != nil {        //      panic(err)        //}}
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

正在(可能)发生的是 sendmail 正在等待输入完成。

要么在写入后关闭管道,要么(取决于 sendmail 版本和内容)尝试通过 ".\n" 作为消息的最后一部分完成发送(除了关闭输入之外,有些版本会接受它)。


查看完整回答
反对 回复 2021-08-23
?
大话西游666

TA贡献1817条经验 获得超14个赞

永远永远永远永远不要在这里使用“-t”命令行选项。它会误投邮件,就像将邮件从邮件列表发送回邮件列表一样。


查看完整回答
反对 回复 2021-08-23
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信