加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

电子邮件 – golang net/smtp获取smtp服务器响应DSN

发布时间:2020-12-16 19:04:39 所属栏目:大数据 来源:网络整理
导读:我使用golang net / smtp发送邮件 每当我发送到我的smtp服务器时,我都需要从服务器捕获响应 尤其是DSN 例如,我的本地smtp服务器在邮件末尾给出了“ok quued as” 我需要捕获它并在日志中打印 我怎样才能做到这一点 package mainimport ( "log" "net/smtp")fu
我使用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,在调用端处理错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读