我尝试使用Go将电子邮件传递给sendmail二进制文件。以下代码可用,但我不会取消对Wait()的调用。如果它已取消注释,程序将挂起。阅读documentation for wait,我得到的印象是它应该被调用,所以我在结束时我的示例代码中出现了错误。有什么建议吗?
package main
import (
"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)
//}
}
答案 0 :(得分:3)
发生的事情(可能)是sendmail正在等待输入完成。
在写完之后关闭管道或(取决于sendmail版本和东西)尝试完成发送通过"。\ n"作为消息的最后一部分(除了输入被关闭之外,某些版本将接受该消息)。
答案 1 :(得分:0)
永远不要使用" -t"命令行选项在这里。它将错误传递邮件,例如将邮件从邮件列表发送回邮件列表。