我正在尝试通过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(或至少是文档)只是垃圾的人吗?
相关分类