我使用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)
}
}
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,您可以使用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
}
Run Code Online (Sandbox Code Playgroud)
,code和messageanyerr现在被传递给调用者,不要log.Fatal在整个代码中使用,在调用方处理错误。
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |