我正在使用golang net / smtp发送邮件
每当我发送到smtp服务器时,都需要捕获服务器的响应 尤其是DSN
例如,我的本地smtp服务器在邮件末尾给出“确定为”的邮件
我需要捕获并记录在日志中
我该怎么做
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)
}
}
答案 0 :(得分:3)
如评论中所述,您可以使用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
}
code
,message
和任何err
现在已传递给调用方,请勿在整个代码中使用log.Fatal
,在调用方处理错误。