我使用golang net / smtp发送邮件
每当我发送到我的smtp服务器时,我都需要从服务器捕获响应
尤其是DSN
例如,我的本地smtp服务器在邮件末尾给出了“ok quued as”
我需要捕获它并在日志中打印
我怎样才能做到这一点
package main import ( "log" "net/smtp" ) func sendEmail(msg []byte) { c,err := smtp.Dial("localhost:25") if err != nil { log.Fatal(err) } if err := c.Mail("sender@example.org"); err != nil { log.Fatal(err) } if err := c.Rcpt("recipient@example.net"); err != nil { log.Fatal(err) } wc,err := c.Data() if err != nil { log.Fatal(err) } _,err = wc.Write(msg) if err != nil { log.Fatal(err) } //How do I get the response here ?? err = wc.Close() if err != nil { log.Fatal(err) } err = c.Quit() if err != nil { log.Fatal(err) } }如评论中所述,您可以使用c.Text.ReadResponse():
package main import ( "net/smtp" ) func sendEmail(msg []byte) (code int,message string,err error) { c,err := smtp.Dial("localhost:25") if err != nil { return } defer c.Quit() // make sure to quit the Client if err = c.Mail("sender@example.org"); err != nil { return } if err = c.Rcpt("recipient@example.net"); err != nil { return } wc,err := c.Data() if err != nil { return } defer wc.Close() // make sure WriterCloser gets closed _,err = wc.Write(msg) if err != nil { return } code,message,err = c.Text.ReadResponse(0) return }
代码,消息和任何错误现在都传递给调用者,不要在整个代码中使用log.Fatal,在调用端处理错误.