如何通过 Gmail Go SDK 发送电子邮件?

我正在尝试通过gmail包发送一封新电子邮件。但是,send方法所需的Message类型的文档很少。大多数字段似乎用于实际解析/阅读电子邮件。唯一对 send 方法有意义(在某种程度上)的字段是MessagePart类型的 Payload, 尽管我无法弄清楚如何生成 MessagePartBody,因为它似乎是一种 mime 类型。下面是我到目前为止的代码。


func (em *Email) SendMessage(cl *Client) error {

    config.ClientId = cl.Username

    config.ClientSecret = cl.Password


    t := &oauth.Transport{


        Config:    config,

        Transport: http.DefaultTransport,

    }

    var tk oauth.Token

    err := json.Unmarshal([]byte(cl.Meta), &tk)

    t.Token = &tk

    if err != nil {

        log.Errorf("meta %v, err %v", cl.Meta, err)

        return err

    }

    gmailService, err := gmail.New(t.Client())

    if err != nil {

        log.Error(err)

        return err

    }


    p := gmail.MessagePart{}

    p.Headers = append(p.Headers, &gmail.MessagePartHeader{

        Name:  "From",

        Value: em.FromEmail,

    })

    p.Headers = append(p.Headers, &gmail.MessagePartHeader{

        Name:  "To",

        Value: em.ToEmail,

    })

    p.Headers = append(p.Headers, &gmail.MessagePartHeader{

        Name:  "Subject",

        Value: em.Subject,

    })


    emsg := base64.StdEncoding.EncodeToString(em.Message)

    log.Info(emsg)

    msg := gmail.Message{

        Payload: &p,

        Raw:     "",

    }

    _, err = gmailService.Users.Messages.Send("me", &msg).Do()

    if err != nil {

        log.Error(err)

        return err

    }

    return err

}

“REST” API更令人困惑。它需要一个uploadType参数(要上传的WTF)和一个raw字段,我猜是原始消息,它需要由messages.get提供的格式。您为什么要从收件箱中发送一条消息,这实际上是“重新发送”,因为您在收件列表中?我是唯一一个认为这个 API(或至少是文档)只是垃圾的人吗?


暮色呼如
浏览 231回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go